有时候删除Cell的时候,不是直接在代理里进行的,那么这时候执行删除操作,如果只执行以下代码:
[self.tableView beginUpdates];
[self.dataArray removeObjectAtIndex:index];
[self.tableView deleteRow:index inSection:0 withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
则会发现后面多次删除时,传过来的index并没有变,还是原来的那一个,这是因为使用
[self.tableView beginUpdates];
[self.tableView endUpdates];
这一对方法完成后,并没有reloadData,只是在动画上对Cell的位置进行了调整。
下面的方式,可以解决该问题:
NSLog(@"1");
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[self.tableView reloadData];
NSLog(@"3");
}];
[self.tableView beginUpdates];
[self.dataArray removeObjectAtIndex:index];
[self.tableView deleteRow:index inSection:0 withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
[CATransaction commit];
NSLog(@"2");
以上打印顺序是1,2,3。删除动画执行完成之后,reloadData,这样下次再删除时,传过来的index就是刷新后的。
网友评论