需要在[self.tableView endUpdates]完成动画后执行reloadSections

时间:2011-03-14 17:21:04

标签: iphone uitableview

我需要执行

[[self tableView] reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];

之后

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
// The fetch controller has sent all current change notifications, so tell the table view to process all updates.
    [self.tableView endUpdates];    
}

完成动画制作。

我想这样做,因为当从节中删除单元格时,我需要重新配置节中的一些单元格。这是因为该部分的第一个和最后一个单元格具有与它们之间的单元格不同的背景。单个单元格具有不同的背景。 如果我不重新配置该部分中剩余的单元格,则可能会导致一个难看的视图。

在controllerDidChangeContent期间调用reloadSections太快而崩溃,因为无法再找到一个单元格。

2 个答案:

答案 0 :(得分:15)

如果要将超过1个参数传递给具有延迟的方法,请使用您自己的方法包装方法调用:

- (void)reloadSections {
    [self.tableView reloadSections:[NSIndexSet indexSetWithIndex:1]
        withRowAnimation:UITableViewRowAnimationNone];
}

然后当你想重新加载时:

[self performSelector:@selector(reloadSections) withObject:nil afterDelay:.2];

答案 1 :(得分:2)

这个怎么样?

[CATransaction begin];

[CATransaction setCompletionBlock:^{
    // animation has finished
}];

[tableView beginUpdates];
// do some work
[tableView endUpdates];

[CATransaction commit];