2013-10-23 1 views
0

나는이 문제에 정말로 좌절하고있다. 나는 누군가가 나를 도울 수 있기를 바란다.자동 스크롤링 조정을 위임 할 대리인은 무엇입니까?

스크린 샷 2

같이 당신은

enter image description here

이메일로 커서를 이동하면

는 화면이 조금을 이동 원점 커서 위치 암호에있는 첫 번째 화면에서 볼 수 있듯이

enter image description here

는 내가 "textFieldDidBeginEditing" 을 무시하고 심지어 "keyboardWillShow 통지"에에 옵저버를 추가하는 시도 키보드의 표시에 대한 제어권을 얻으십시오. 하지만 둘 다 작동하지 않습니다. 그것은 여전히 ​​조금씩 움직이며, 내가 원하는 것은 더 많습니다. 내가 알아 차린 것은 "textFieldDidBeginEditing"이 제대로 호출되는 동안 전체 textField가 가시적 인 경우 절반 선이 덮여 있거나 숨겨져있을 때만 작동하지 않는다는 것입니다.

tableView/ScrollView와 관련된 일부 대리자 메서드가 있거나 키보드 나 UIResponder와 관련이 있지만 숙련 된 개발자의 도움이 필요하다고 생각합니다.

감사합니다.

+0

이것은 그룹화 된 테이블보기입니까? – Kevin

+0

그리고 너는 무엇을 원하는가, 그것은 화면의 중앙쪽으로 더 가겠습니까? – Kevin

+0

당신은이보기가 어떻게 배치되는지 정교해야합니다 - 케빈과 같이 그룹화 된 tableview입니까? 또는 텍스트 필드가 편집을 시작할 때 오프셋을 수동으로 움직이는 스크롤보기입니까? – RyanR

답변

1

그룹화 된 테이블보기를 사용하고있는 것 같습니다. 첫 번째 응답자가되면 텍스트 필드를 자동으로 스크롤하여 표시합니다. 그러나, 당신이 알았 듯이, 텍스트 필드가 스크린의 절반 인 경우, 맨 위 (또는 맨 아래)의 모든 곳으로 스크롤됩니다. 화면의 특정 지점에 항상 표시하려면 오프셋을 계산하고 직접 설정해야합니다. textFieldDidBeginEditing 콜백에서 직접 처리하면 테이블의 기본 스크롤에 의해 재정의되므로 약간 지연됩니다.

아이폰 OS 7의 테이블 스크롤이 약간의 버그가 있음을
-(void) textFieldDidBeginEditing:(UITextField *)textField 
{ 
    double delayInSeconds = 0.01; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     CGRect bounds = textField.bounds; 
     CGPoint offset = [self.tableView convertPoint:bounds.origin fromView:textField]; 
     offset.x = 0; 
     offset.y -= 150; 
     [self.tableView setContentOffset:offset animated:YES]; 
    }); 
} 

주, 그래서 이것은 점프의 약간의 원인이 될 수 있습니다. 자동 스크롤 후 0.25 초가 될 때까지 지연을 늘림으로써 점프를 줄일 수 있습니다.

+0

정말이 솔루션을 주셔서 감사합니다. 하지만 더 많은 해결책을 찾고 있습니다. 기본 위임 메서드를 재정의하여 동작을 제어 할 수 있습니다. tableView-wide 기타 현명한 방법으로 모든 textField의 거리를 수동으로 계산해야합니다. 아주 좋은 해결책은 아닌 것 같습니다. . – TypingPanda

+1

마술 대리인 메서드가 없습니다. 이 코드는 이미 모든 텍스트 필드의 거리를 계산합니다. 변경할 필요가있는 것은'- = 150'입니다. 화면에서 화면의 원하는 부분을 조정하십시오. – Kevin

+1

테이블을 서브 클래스 화하고'setOffset : animated :'메소드를 오버라이드 할 수 있지만, 블록/블록을 변경하거나 변경해서는 안되는 것을 알면 행운을 빈다. – Kevin

0
- (void) textFieldDidBeginEditing:(UITextField *)textField{ 

    //if you just want to set the contentOffset when editing emailField add following condition 
    if (textField==emailField) { 

     float yOffSet = someValue;  

     [mytableView setContentOffset:CGPointMake(0.0f, yOffSet)]; 

     [emailField becomeFirstResponder]; 

    } 
관련 문제