我有一个UITableViewController在每个单元格中都有一个UITextField。当用户点击一个字段返回,它会自动将下一个字段是第一个响应并滚动表显示领域,像这样:iOS6和屏幕外的UITextView在UITableView
- (BOOL) textFieldShouldReturn:(UITextField *)textField
{
UITextField *nextTextField=nil;
NSInteger row;
NSInteger section;
if(textField == self.txtFieldA)
{
nextTextField = self.txtFieldB;
row=1; section=0;
}
else if(textField == self.txtFieldB)
{
nextTextField = self.txtFieldC;
row=2; section=0;
}
else
{
[textField resignFirstResponder];
}
if(nextTextField)
{
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:section];
[nextTextField becomeFirstResponder];
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}
}
当您选择文本字段中的问题来(说txtFieldA ),向下滚动表格以便txtFieldB不可见,然后按Enter键。它在iOS5上按预期工作(txtFieldB成为新的第一响应者)。但是,在iOS6上它没有。它滚动到表格中的正确位置,但txtFieldB不成为第一响应者(我不确定是什么 - 当我在导航控制器上点击“返回”时,键盘保持可见状态)。
当我点击“返回”时,txtFieldB的didBeginEditing未被触发。如果我将[nextTextField becomeFirstResponder]
延迟了一秒钟左右(直到滚动动画完成,这使得nextTextField可见),它的工作方式与预期的一样,但它看起来很乱,不那么流畅,所以我宁愿明白发生什么事情比实现类似的东西。
这绝对是一种更好的方式来设置它,但我不确定这将解决在下一个单元离开屏幕时点击“下一步”的问题。当您在iOS6上编译代码时,此代码是否工作? – Ned
是的,它适用于iOS6。此代码直接从我的应用程序中拉出,该应用程序旨在运行iOS5和iOS6。 –