becomeFirstResponder:自动滚动到成为第一响应者的UIControl

时间:2011-02-18 15:07:36

标签: iphone ios scroll becomefirstresponder

我有一个分组UITableViewController,其中包含一个部分和多行。每个cell由两个元素组成:UILabel带有描述,UITextField表示输入。我想说一个表格。

在底部是一个按钮“下一步”转到下一个视图。但在此之前,我验证了UITextField:如果用户没有填写字段,则该字段应该获得焦点,以便用户看到他需要输入内容。我试过这个:

[inputField becomeFirstResponder];

请记住,我按下的按钮是我视图底部,并且假设UITextField顶部是 。在这种情况下,该领域没有得到关注,因为它距离太远。现在,当我慢慢向上滚动并且字段变得可见时,该字段成为第一响应者并获得光标:-)结论:becomeFirstResponder工作,但并不完全按照我的意愿行事。我不想用手指向上滚动,该字段应该得到焦点并自动显示。

有没有办法直接“跳”到我的领域?使用becomeFirstResponder的替代方案?自动滚动到我的字段?

感谢您的帮助!

2 个答案:

答案 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