У меня есть UITableView с несколькими UITableViewCells, и внутри этих ячеек есть UITextFields.Я реализовал UIToolbar для переключения между различными текстовыми полями.Я могу перейти к следующему текстовому полю в следующей ячейке или к предыдущему текстовому полю.Это работает нормально до тех пор, пока ячейка не станет первым респондентом, который в данный момент не виден в табличном представлении.
Я выяснил, что
[self.tableview cellForRowAtIndexPath:indexPath]
возвращает nil
и что прокрутка вручную до ячейки с помощьютекстовое поле, которое должно стать первым респондентом, устраняет проблему.Поэтому я попытался прокрутить к ячейке, прежде чем изменить ее, чтобы стать первым респондентом.
Я попытался сделать это с помощью
[[self.tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
, но, к сожалению, просмотр таблицы не прокручивается до этой ячейки, но до всех других ячеек.Когда я добавляю точку останова к этой строке, проблема не возникает.Похоже, что просмотр таблицы прокручивается до ячейки, но затем снова прокручивается вниз.
Вот код cellForRowAtIndexPath:
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;
Вот код для переключения на предыдущее текстовое поле:
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];
Надеюсь, это поможет.