(Это основано на ответе на вопрос об ароматах.)
Мне нравится определять это как категорию для 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);
}];
Было бы неплохо также ввести определение блока.