2011-04-25 3 views
2

나는 여러 UITableViewCells 가진 UITableView 있고 이러한 셀 안에 UITextFields 있습니다. 다른 텍스트 필드간에 전환하기 위해 UIToolbar를 구현했습니다. 다음 셀의 다음 텍스트 필드 나 이전 텍스트 필드로 이동할 수 있습니다. 셀이 테이블 뷰에서 현재 보이지 않는 첫 번째 응답자가 될 때까지이 작동합니다.UITableView scrollToRowAtIndexPath 경우에만 스크롤합니다

내가 알아 낸 그

[self.tableview cellForRowAtIndexPath:indexPath] 

반환 nil하고 수동으로 첫 번째로 반응이되어야 텍스트 필드와 셀, 스크롤, 문제를 제거합니다. 따라서 첫 번째 응답자가되도록 변경하기 전에 셀을 스크롤하려고했습니다.

나는 노력이

[[self.tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 

로하지만 불행히도있는 tableview이 셀에 다른 모든 세포로 이동하지 않습니다. 이 줄에 중단 점을 추가하면 문제가 발생하지 않습니다. 또한 테이블 뷰가 셀로 스크롤되지만 다시 아래로 스크롤되는 것처럼 보입니다. 이 도움이

UIView * currentResponder = [self.view findFirstResonder]; 

UITextField * newFocusTextField; 
UITableViewCell * cell = (UITableViewCell*)[[currentResponder superview] superview]; 
NSIndexPath* indexPath = [self.tableView indexPathForCell:cell]; 

newFocusTextField = (UITextField*)[[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:1 inSection:0]] viewWithTag:1]; 
[currentResponder resignFirstResponder]; 
[newFocusTextField becomeFirstResponder]; 

UITableViewCell * newCell = (UITableViewCell*)[[newFocusTextField superview] superview]; 
NSIndexPath * newIndexPath = [self.tableView indexPathForCell:newCell]; 
[self.tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 

희망 :

여기
UITableViewCell *cell; 
static NSString *AttributeCellIdentifier = @"AttributeCellIdentifier"; 
    cell = [tableView dequeueReusableCellWithIdentifier:AttributeCellIdentifier]; 
    if (cell == nil) { 
     [[NSBundle mainBundle] loadNibNamed:@"AttributeCell" owner:self options:nil]; 
     cell = attributeCell; 
     self.attributeCell = nil; 
     UITextField * textField = (UITextField *)[cell viewWithTag:1]; 
     [textField setKeyboardType:UIKeyboardTypeDecimalPad]; 
     [textField setInputAccessoryView:[self inputAccessoryView]]; 
    } 
UITextField * textField; 
textField = (UITextField *)[cell viewWithTag:1]; 
textField.placeholder = @"C(Probe)/mol/l"; 
return cell; 

이전 텍스트 필드로 전환하기위한 코드입니다 : 여기

은 cellForRowAtIndexPath의 코드입니다.

+0

cellForRowAtIndexPath에 대한 코드를 게시하십시오. 이 방법의 내용을 작성 했습니까? 그렇다면, 왜 그것을 돌려주지 않습니까?그렇지 않다면 왜 안 되겠습니까? – Rayfleck

+0

나는 그 코드를 썼다. 그리고 스크롤이 작동하지 않을 때 셀이 보이지 않기 때문에 nil을 반환한다고 생각한다. cellForRowAtIndexPath에 대한 설명서에서 : 테이블의 셀을 나타내는 객체 또는 셀이 표시되지 않거나 indexPath가 범위를 벗어난 경우 nil. –

+0

툴바를 탭하여 텍스트 필드를 노출/편집하면 어떻게됩니까? 여기에 순서 문제가 있는지 궁금합니다. 즉 셀을 먼저 노출 시키려면 표를 스크롤 한 다음 첫 번째 응답자로 만들어야합니다. – Rayfleck

답변

1

나는 여러 가지 생각을했으며 모든 것이 이제는 잘 작동한다.

[currentResponder resignFirstResponder]; 

그리고있는 tableview 잘 스크롤 그 라인을 제거한 후 내가 직접 newFocusTextField과 새로운 셀에 포인터를 설정하고 그것을 firstResponder 할 수 있습니다 : 나는 제거 나는 nextTextField이

[newFocusTextField becomeFirstResponder]; 

문제가 발생하지만 난 그냥 새로운 firstResponde을 설정 한 후 셀에 스크롤 생각하는 이유

[currentResponder resignFirstResponder]; 

와 함께 잘 작동 방법은 그래서 난 정말 이해가 안 돼요 r은 현재 currentResponder를 먼저 사퇴하는 것이 좋습니다.

어쨌든 도와 주셔서 감사합니다;)

2

게시물의 코드와 문제 정의가 100 % 명확하지 않지만 iOS 3.0에서 작동하는 '스크롤 방법'에 버그/결함이있었습니다 (구체적으로 3.0으로 추측합니다). 나는 그 일이 일어날 이유를 알아 내지 못했지만, iOS 4.x에서는 괜찮 았지만 항상 깨지기 시작했다.

수정 스크롤 라인 전에

[table reloadData] 

첨가 하였다. 나는 이해가 안된다는 것을 알고 있으며 특히 셀 렌더링이 비싸다는 것이 좋은 습관은 아니라는 것을 알고 있지만,이 경우 문제를 해결했다. 나는 당신의 문제가 같은 문제에서 유래하는지 알지 못하지만, 그냥 시도해 볼 수는 있겠지만 ...

+0

두려워하지만 내 문제가 해결되지 않습니다. 나는 나의 문제를 더 분명하게 설명하기 위해 나의 queston을 편집 할 것이다. –

관련 문제