iOS SDK:如何获取表格视图中不可见的单元格?

iOS SDK: How to get a cell in a table view that is not visible?

提问人:Daniel Mühlbachler-P. 提问时间:6/26/2011 最后编辑:AbizernDaniel Mühlbachler-P. 更新时间:10/2/2017 访问量:12187

问:

如何获取当前在表中不可见的 indexPath 的单元格?(单元格超出范围)

获取我的单元格的代码:

NSString *name = [[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] text];

-cellForRowAtIndexPath...返回,因为所需 indexPath 处的单元格超出范围。那么,如何获得正确的单元格而不是零呢?nil

iPhone iOS UITableView

评论

0赞 dasdom 6/26/2011
请提供更多信息和代码。
0赞 Daniel Mühlbachler-P. 6/26/2011
好的,我有一个分组的表格视图,其中一些单元格有文本字段,最后有表示按钮的单元格。现在我遇到了一个问题,如果我在表格视图的末尾,我的前几个单元格现在超出了范围,但是如果我单击代表按钮的单元格,我需要开头提供的信息。现在我试过:[[(ELCTextfieldCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]] rightTextField] text] 但是 -cellForRowAtIndexPath:...返回 NIL,因为单元格超出范围。那么,如何获得正确的单元格(而不是零)?
0赞 Abizern 6/26/2011
正如 nacho4d 所说,您的问题的答案是 - 不要使用单元格来获取信息,而是从您的底层数据源获取信息。更广泛的答案是,您似乎正在使用表视图来布局滚动 UI,而不是在滚动器中使用视图。

答:

17赞 Raphael Petegrosso 6/26/2011 #1

唯一保留可见的单元格。如果您需要一个不可见的,则必须调用 .因此,如果 self 是一个类,则:UITableViewtableView:cellForRowAtIndexPath:UITableViewdataSourcedataSource

UITableViewCell * cell = [self tableView:table cellForRowAtIndexPath:indexPath];

评论

3赞 Eiko 6/26/2011
通常,这不会保留在这些单元格中输入的数据。仅当仍在缓存中时才有效。
2赞 nacho4d 6/26/2011 #2

UITableViewCells 可以重复使用/回收,用户不需要创建比可见单元格数量更多的单元格。 您通常不需要访问不可见的单元格。访问数据源并在那里获取/设置相应的数据就足够了。单元格用于显示数据源的某些状态。不是数据源本身:)

编辑:

你说你需要上面一个单元格的一些信息(文本),对吧?如果使用 method,则将重新创建单元格,但可能无法获取文本字段中的文本。原因是什么?因为可能你没有把它保存在其他地方。如果您确实保存了它,请直接访问它,而不是通过单元格。cellForRowAtIndexPath:

5赞 Eiko 6/26/2011 #3

这不是它的工作原理。一旦输入或更改信息,您需要立即获取并存储信息。它可能很容易超出范围,你不能保证你的细胞寿命足够长。好吧,从技术上讲,您可以保留它(并且始终为相同的索引路径返回相同的单元格),但我会质疑这种设计。

评论

0赞 Daniel Mühlbachler-P. 6/26/2011
好的,但是我有一个表格,可以在其中动态添加单元格,但我不知道用户将生成多少个单元格。
0赞 Eiko 6/26/2011
我认为唯一合理的方法是在更改发生后立即保存它们。您以后可能很难检索该数据,并且该单元甚至可能已经“死亡”并被释放。
0赞 Dean Davids 6/26/2011 #4

要填充表格的信息是否来自数组?您不能直接从 0 索引处的数组中提取它,就像您的 cellForRowAtIndexPath 在显示该单元格时可能会检索并填充该单元格一样吗?

1赞 Yonathan Goriachnick 9/28/2017 #5

继续@Raphael的回答,这是(有效的)swift 3 解决方案:

UITableViewCell cell = self.tableView(self.tableView, cellForRowAt: indexPath)