iPad:迭代UITableView中的每个单元格?
答案 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)
答案 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 {
// ?
}