获取 UITableView 中的所有单元格?
Posted
技术标签:
【中文标题】获取 UITableView 中的所有单元格?【英文标题】:Get all cells In UITableView? 【发布时间】:2012-12-04 09:34:29 【问题描述】:我需要获取 UITableView 中所有单元格的数组。我目前使用的方法如下:
-(NSArray *)allTableViewCellsArray
NSMutableArray *cells = [[NSMutableArray alloc] init];
for (NSInteger j = 0; j < [tableView numberOfSections]; ++j)
for (NSInteger i = 0; i < [tableView numberOfRowsInSection:j]; ++i)
[cells addObject:[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:j]]];
return cells;
我已经取得了一些成功,但是我发现当单元格不可见时它会崩溃。那么如何获取 UITableView 中所有单元格的数组,无论它们是否可见?
【问题讨论】:
【参考方案1】:您是否在实施中重复使用表格单元格?如果是这样,我认为您无法从 UITableView 中获取所有 UITableViewCell 对象,因为 UITableView 的单元格重用逻辑。
因此,您需要在代码中“禁用”单元格重用机制。
这可以通过不使表格视图数据源委托的cellForRowAtIndexPath
方法中的单元格出列(即不再使用dequeueReusableCellWithIdentifier
方法)并通过将nil 传递给单元格初始化方法的reuseIdentifier
属性(@ 987654324@)。
那么您的allTableViewCellsArray
方法可能会起作用!
但我认为你仍然不会有任何运气来完成这项工作。
来自[tableView cellForRowAtIndexPath:]
的 Apple 文档:
Return Value An object representing a cell of the table or nil if the cell is not visible or indexPath is out of range.
【讨论】:
感谢您的建议,刚刚尝试过,但没有成功。我在cellForRowAtIndexPath
方法中尝试了UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
。
好吧,我认为你不会有任何运气来完成这件事。要理解的重要一点是,不可见的单元格实际上并不存在(或者至少它们可能不存在)。您不能以某种方式从数据源中提取所需的信息吗?【参考方案2】:
找到了解决办法。而不是在我选择的任何时间点抓取所有单元格,因为它不起作用;我创建了一个包含所有单元格的数组,这样每个单元格都被迭代,这意味着我可以将它们全部添加到一个数组中。
我在willDisplayCell
方法中执行此操作。
【讨论】:
【参考方案3】:for (UIView *view in TableView.subviews)
for (tableviewCell *cell in view.subviews)
//do
【讨论】:
这是有风险的,因为不是 TableView 的所有子视图都必须是 TableViewCells。 你可以使用'[cell isKindOfClass:[UITableViewCell class]]'来检查它以上是关于获取 UITableView 中的所有单元格?的主要内容,如果未能解决你的问题,请参考以下文章
如何编写 UI 测试来测试单击 UITableView 中的第一个单元格时图像是不是存在?
使用 Parse 获取 UITableView 中的单元格数
使用大型数据库时,如何避免 UITableView 中的自定义单元格加载时间过长