在UITableView中获取所有单元格?

时间:2012-12-04 09:34:29

标签: iphone objective-c ipad uitableview

我需要在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中所有单元格的数组,无论它们是否可见?

3 个答案:

答案 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
    }
}