我有一个分组UITableViewController
,其中包含一个部分和多行。每个cell
由两个元素组成:UILabel
带有描述,UITextField
表示输入。我想说一个表格。
在底部是一个按钮“下一步”转到下一个视图。但在此之前,我验证了UITextField
:如果用户没有填写字段,则该字段应该获得焦点,以便用户看到他需要输入内容。我试过这个:
[inputField becomeFirstResponder];
请记住,我按下的按钮是我视图底部的,并且假设UITextField
顶部是 。在这种情况下,该领域没有得到关注,因为它距离太远。现在,当我慢慢向上滚动并且字段变得可见时,该字段成为第一响应者并获得光标:-)结论:becomeFirstResponder
工作,但并不完全按照我的意愿行事。我不想用手指向上滚动,该字段应该得到焦点并自动显示。
有没有办法直接“跳”到我的领域?使用becomeFirstResponder
的替代方案?自动滚动到我的字段?
感谢您的帮助!
答案 0 :(得分:4)
如果您知道要编辑的UITextField的单元格索引,请使用
NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]
在致电becomeFirstResponder
之前。
如果单元格不在屏幕上,则对于某些版本的iOS,becomeFirstResponder可能会失败。此外,在某些情况下,某些版本会在tableview上执行额外的滚动(例如,如果Apple的代码确定响应者仍然不在屏幕上而没有更多滚动)。要解决这些问题,您可能需要在滚动动画完成后调用成为第一响应者。
答案 1 :(得分:0)
我也是同一个问题。 这是由于同时发生两个任务的UIAnimation 。因此,当scrollToRowAtIndexPath的UIAnimation忽略了becomeFirstResponder。
解决方案可能是使用performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];
禁用动画效果 OR 。