2012-06-20 2 views
3

iOS에서 긴 양식에 문제가 있습니다. 양식 자체는 정적 테이블보기로 수행됩니다. 양식에 나는 이전/다음과 함께 도구 모음이 필요하고 완료되었습니다. 이 프로젝트에서 나는 BSKeyboardControls을 추가했으며, 나는 이미 다른 프로젝트에서이 프로젝트를 직접 다 해냈다.iOS 밖으로보기 텍스트 필드로 스크롤

다음 또는 이전 textField/textView가 보이지 않는 경우를 제외하고 도구 모음이 제대로 작동합니다. 그러면 이전 textField에 대한 포커스가 변경되지 않고이 텍스트 필드에 계속 입력합니다. 이제 수동으로 스크롤하고 대상으로 된 다음 텍스트 필드가 나타나면 마술처럼 첫 번째 응답자가됩니다. 물론 이것은 예상 된 행위자가 아닙니다.

그래서 첫 번째 응답자로 설정하기 전에 해당 필드로 테이블보기를 스크롤해야한다는 것을 알았습니다. 그러나 나는 이것을 끝내지 않았다. 슈퍼 수퍼 유효한 (오른쪽) 테이블 셀이지만

내가 indexPathes

NSIndexPath *path = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview]; 
[self.tableView scrollToRowAtIndexPat:path atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

와이에 시도했다, 반환 된 경로는 전무하다. 나는 또한 약간 변이를 시도했다

CGPoint point = [self.tableView convertPoint:textField.frame.origin toView:self.tableView]; 
NSIndexPath *path = [self.tableView indexPathForRowAtPoint:point]; 

및 rects와 다른 다른 변이 및 indexPathsForRowsInRect.

유일한 방법은 textFields 셀 indexPaths를 수동으로 추적하는 것이지만이 경우 적절한 해결책이 아닙니다.

누구나 눈에 띄지 않는 곳으로 스크롤하는 방법에 대한 아이디어가 있습니다. tableField에있는 tableView?

편집 저스틴 폴슨 keyboardControlsPreviousNextPressed의 코드 요청 같이

:

- (void)keyboardControlsPreviousNextPressed:(BSKeyboardControls *)controls withDirection:(KeyboardControlsDirection)direction andActiveTextField:(id)textField 
{ 
    NSIndexPath *path = [self.tableView indexPathForCell:(UITableViewCell *)((UIView *)textField).superview.superview]; 
    NSLog(@"path %@ for cell %@", path, ((UIView *)textField).superview.superview); 
    [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
    [textField becomeFirstResponder]; 
} 

I는의 출력에 따라 상기하면서 상기 수퍼 수퍼가 rught 테이블 반면 경로가 전무하다 로그인 셀보기

+0

VCView 클래스의 기본 UIViewController 또는 UITableViewController를 사용합니까? UITableViewController 사용의 장점 중 하나는 예를 들어 UITextField를 첫 번째 응답자로 지정하면 UITableViewController가 자동으로 스크롤되어 필드가 표시된다는 것입니다 (예 : 키보드 아래 표시되지 않음) – Ladislav

+0

코드가 어떻게 보이는지 이 델리게이트 함수는 :'keyboardControlsPreviousNextPressed : withDirection : andActiveTextField :'? –

+0

빠른 응답에 감사드립니다. @ Ladislav 메신저 UITableViewController 사용하지만 자동으로 스크롤하지 않습니다. – patman

답변

3

나를 도우려는 것에 감사드립니다. 해결책을 찾았습니다. 있음 내 keyboardControlsPreviousNextPressed 지금은

[self.tableView scrollRectToVisible:((UIView *)textField).superview.superview.frame animated:YES]; 
[textField becomeFirstResponder]; 

이 솔루션은 꽤 잘 작동하는 것 같습니다. 내가 만난 유일한 문제는 때로는 새로 초점을 맞춘 textField가 키보드에 의해 숨겨져 있으므로 tableViewController가 자동으로 조정되지 않습니다. 이 행을 맨 위로 스크롤하여 대부분의 경우이를 피할 수 있습니다.

NSIndexPath *path = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview]; 
[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
관련 문제