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

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

[inputField becomeFirstResponder];

请记住,我按下的按钮是 在底部 根据我的观点并想象 UITextField在顶端. 。在这种情况下,该场不会获得焦点,因为它距离太远。现在,当我缓慢向上滚动并且该字段变得可见时,该字段成为第一响应者并获取光标:-) 结论:这 becomeFirstResponder 有效,但并不完全符合我的意愿。我不想用手指向上滚动,该字段应该获得焦点并自动可见。

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

感谢您的帮助!

有帮助吗?

解决方案

如果您知道要编辑的 UITextField 单元格的索引,请使用



NSIndexPath* indexPath = [[NSIndexPath indexPathWithIndex:your_section_index] indexPathByAddingIndex:your_cell_index];
[tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]

在你打电话之前 becomeFirstResponder.

如果单元格不在屏幕上,对于某些版本的 iOS,becomeFirstResponder 可能会失败。此外,某些版本在某些情况下会在 tableview 上执行额外的滚动(例如如果 Apple 的代码确定响应者仍会离开屏幕而无需更多滚动)。要解决这些问题,您可能需要在滚动动画完成后调用成为第一响应者。

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top