如何在添加或删除单元格后重新加载所有表格单元格?

时间:2011-08-11 15:37:12

标签: iphone objective-c ios uitableview

添加或删除单元格后,只重新加载我添加或删除的单元格。在添加或删除新单元格后,我需要重新加载所有单元格。

我知道[self.tableView reloadData],但是如果我在添加或删除单元格后立即调用它,它会切断单元格添加/删除动画。

我实际上已经找到了解决这个问题的方法,但它有些不太常见,我认为可能有更好的方法。这就是我现在所做的:

[self.tableView deleteRowsAtIndexPaths:row_to_delete withRowAnimation:UITableViewRowAnimationRight];

double delayInSeconds = .25;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self.tableView reloadData];
});

3 个答案:

答案 0 :(得分:2)

尝试延迟重新加载表。

删除后,

[self performSelector:@selector(reloadTableview) withObject:nil afterDelay:0.35];

-(void) reloadTableview {
     [self.YourTableView reloadData];
}

答案 1 :(得分:1)

如果要同时对后续插入,删除和选择操作(例如,cellForRowAtIndexPath:和indexPathsForVisibleRows)进行动画处理,请调用beginUpdates。这组方法必须以调用endUpdates结束。这些方法对可以嵌套。如果未在此块内进行插入,删除和选择调用,则行计数等表属性可能会变为无效。你不应该在组内调用reloadData;如果你在组内调用此方法,则需要自己执行任何动画。

[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:row_to_delete withRowAnimation:UITableViewRowAnimationRight];
[self.tableView endUpdates];

答案 2 :(得分:1)

也许你可以使用这个tableView方法:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

在一个街区内:

[tv beginUpdates];

// delete and reloadRows    

[tv endUpdates];