如果您一次只允许一个复选标记,您可以将当前选择的 indexPath(或合适的代理)保留在一个属性中,然后您只需要更新两行。
否则,你将不得不循环。通常,我有一个configureCell:atIndexPath:
可以从任何地方(包括cellForRowAtIndexPath
)调用的方法和一个reloadVisibleCells
方法:
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
//cell configuration logic
}
- (void)reconfigureVisibleCells
{
for (UITableViewCell *cell in [self.tableView visibleCells]) {
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[self configureCell:cell atIndexPath:indexPath];
}
}
begin/endUpdates
或者,如果您想拥有内置的行动画,您可以使用更传统的方法在三明治中重新加载单元格:
- (void)reloadVisibleCells
{
[self.tableView beginUpdates];
NSMutableArray *indexPaths = [NSMutableArray array];
for (UITableViewCell *cell in [self.tableView visibleCells]) {
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
[indexPaths addObject:indexPath];
}
[self.tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
}