iPad:迭代UITableView中的每个单元格?

时间:2011-04-13 05:00:31

标签: ipad uitableview

iPad:迭代UITableView中的每个单元格?

7 个答案:

答案 0 :(得分:65)

for (int section = 0; section < [tableView numberOfSections]; section++) {
    for (int row = 0; row < [tableView numberOfRowsInSection:section]; row++) {
        NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
        UITableViewCell* cell = [tableView cellForRowAtIndexPath:cellPath];
        //do stuff with 'cell'
    }
}

答案 1 :(得分:26)

迭代UITableView中的每个可见单元格:

for (UITableViewCell *cell in self.tableView.visibleCells) {
    NSIndexPath *cellIndexPath = [self.tableView indexPathForCell:cell];

(编辑以更好地陈述答案,并希望对搜索结果更准确地编制索引,以便在将来为其他人节省更多时间)

答案 2 :(得分:4)

(这建立在aroths的答案之上。)

我喜欢将其定义为UITableView的类别,因此它随处可用。

(如前所述,您应该确定真的希望迭代单元格本身。例如:我用它来清除所有的UITableViewAccessoryCheckmark在将其设置为用户选择的单元格之前的单元格。一个好的经验法则是,只有在数据源方法无法满足您需要的情况下才能执行此操作。)

定义如下:

- (void)enumerateCellsUsingBlock:(void (^)(UITableViewCell *cell))cellBlock {
    NSParameterAssert(cellBlock != nil);
    for (int section = 0; section < [self numberOfSections]; section++) {
        for (int row = 0; row < [self numberOfRowsInSection:section]; row++) {
            NSIndexPath *cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell *cell = [self cellForRowAtIndexPath:cellPath];
            if (cellBlock != nil) {
                cellBlock(cell);
            }
        }
    }
}

这样打电话:

[self.tableView enumerateCellsUsingBlock:^(UITableViewCell *cell) {
    NSLog(@"cell:%@", cell);
}];

输入块也是一种很好的风格。

答案 3 :(得分:2)

假设存在变量myTableView且其委托和数据源都已设置:

UITableViewCell *cell;
NSIndexPath indexPath = [[NSIndexPath indexPathForRow:0 inSection:0];
for(indexPath.section = 0; indexPath.section < [myTableView numberOfSections]; ++indexPath.section)
{
    for(indexPath.row = 0; indexPath.row < [myTableView numberOfRowsInSection:indexPath.section]; ++indexPath.row)
    {
        cell = [myTableView cellForRowAtIndexPath:indexPath];
        // do something with this cell
    }
}

答案 4 :(得分:1)

更简单,更优雅:

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell
                                         forRowAtIndexPath:(NSIndexPath *)indexPath {
    // use the "cell" here
}

但显然它并不适合所有情况。

答案 5 :(得分:0)

这是如何迭代所有表视图单元格甚至不可见的,请在此处查看我的答案:

https://stackoverflow.com/a/32626614/2715840

提示:Swift中的代码。

答案 6 :(得分:0)

迅速4:

extern "C" fn pread(
    _h: *mut c_void,
    buf: *mut c_char,
    _count: uint32_t,
    offset: uint64_t,
    _flags: uint32_t,
) -> c_int {
    // ?
}

extern "C" fn pwrite(
    _h: *mut c_void,
    buf: *const c_char,
    _count: uint32_t,
    offset: uint64_t,
    _flags: uint32_t,
) -> c_int {
    // ?
}

by史蒂夫 Iterate over all the UITableCells given a section id