0

我有一个包含 10 个部分的组表视图,每个部分有一个单元格,每个单元格里面都有一个文本字段。

当用户点击文本字段时,我将其父单元格滚动到底部,使其正好位于键盘上方。

每个文本字段都有一个“下一个”返回键,因此当用户点击它时,下一个文本字段(在下面的单元格中)应该是第一响应者。

问题是:
假设用户点击索引 5 处的单元格文本字段,这将使键盘弹出并且表格视图将滚动,因此该单元格将位于键盘正上方。
现在用户按下下一个按钮..
我想要发生的是让索引 6 处的单元格的文本字段成为第一响应者。
但是我如何获得这个文本字段?
如果我尝试获取单元格,cellForRowAtIndexPath我将得到零,因为单元格是不可见的..

4

2 回答 2

1

想到了两个解决方案:

1)你没有很多单元格,所以不要回收它们,在启动时创建它们并将它们放在一个可以轻松获取它们的数组中,然后,当 tablview 要求单元格时,你将它们从你的大批。

当您想进入下一个时,您同时告诉 tableview 滚动到某个位置或单元格,然后将单元格从数组中拉出,将其添加到带有一些屏幕外框架的视图中,这样就看不到了,并且使 textField 成为第一响应者(以保持键盘向上)。当 tableView 请求单元格时,您可能需要重置框架,或者同时重置框架并将其从视图中删除。如果您发现需要这样做,您可能需要尽快再次使其成为第一响应者(向主队列发送一个块,以便文本字段永远不会退出第一响应者。

2) 同样,当您想让单元格的 textField 成为第一响应者,并将其包含在可见单元格中时,您只需滚动并使其成为第一响应者。如果它不在 visibleCells 中,请创建一个单元格,将其添加到上面的视图中,按照上面的方式执行第一响应者的操作,当您被要求提供该单元格的索引时,提供该单元格,可能会重置框架。

我已经使用屏幕外文本字段来玩键盘的技巧(保持它,让它起来,等等 - 所以我知道这是有效的)。对我来说不太确定的是 textField 是否在视图中的技巧。

这让我想到了第三种方法。您在视图中放置了一个屏幕外的 UITextField。当你想切换,并且单元格还不可见(即创建)时,你告诉屏幕外 textField 是 firstReponder,然后跟踪 tableView 滚动,当它结束 textField 你想要的第一响应者现在是可见的,所以你可以在它上面传输(即设置)firstResponder,保持键盘向上。

于 2012-08-22T18:03:07.747 回答
1

I do not know how you create your rows but you need to consider, that UITableView recycles the cells. That means that the text field could be theoretically the same as before, just the content changes.

So all you need to do is make sure you know the textfield that is positioned right above the keyboard. I would not be surprised if this will be created when the view enters and never actually changes.

Again, the table recycles the cells and their content holders only filling in the corresponding data for the row as you provide it.

If you post your code that creates and recycles the cells I could be more specific.

于 2012-08-22T17:52:09.323 回答