我需要在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中所有单元格的数组,无论它们是否可见?
答案 0 :(得分:7)
您是否在实施中重复使用表格单元格?如果是这样,我认为你无法从UITableView获取所有UITableViewCell对象,因为UITableView的单元重用逻辑。
因此,您需要在代码中“禁用”单元格重用机制。
这可以通过在表视图数据源委托的dequeueReusableCellWithIdentifier
方法中不出列(即不再使用cellForRowAtIndexPath
方法)单元格并通过传递reuseIdentifier
属性的nil来实现。单元格初始化方法(initWithStyle:reuseIdentifier:
)。
那么你的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.
答案 1 :(得分:3)
找到解决方案。而不是在我选择的任何时间点抓住所有细胞,因为它不起作用;我创建了一个包含所有单元格的数组,这样每个单元格都会被迭代,这意味着我可以将它们全部添加到数组中。
我在willDisplayCell
方法中执行此操作。
答案 2 :(得分:-2)
for (UIView *view in TableView.subviews) {
for (tableviewCell *cell in view.subviews) {
//do
}
}