2

我有UITableViewController一个部分和多行的分组。每个cell都由两个元素组成:UILabel带有描述的 a 和UITextField用于输入的 a。一种形式,我会说。

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

[inputField becomeFirstResponder];

请记住,我按下的按钮位于视图的底部,并想象UITextField位于顶部。在这种情况下,由于距离太远,该场无法获得焦点。现在,当我慢慢向上滚动并且该字段变得可见时,该字段成为第一响应者并获得光标:-) 结论:becomeFirstResponder有效,但并不完全符合我的要求。我不想用手指向上滚动,该字段应该自动获得焦点并可见。

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

谢谢你的帮助!

4

2 回答 2

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 的代码确定响应者在没有更多滚动的情况下仍会离开屏幕)。要解决这些问题,您可能需要在滚动动画完成后调用成为第一响应者。

于 2011-02-18T15:22:57.320 回答
0

我也有同样的问题。 这是由于两个任务同时发生的 UIAnimation。因此,虽然 scrollToRowAtIndexPath 的 UIAnimation 忽略了 becomeFirstResponder 。

解决方案可能是禁用其中一个动画效果, 或者使用 performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:1.0f];.

于 2014-03-10T07:34:21.377 回答