我正在使用以下代码更新我的UITableView
:
int index = [self.guests indexOfObject:_guests];
[[self tableView] beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
[[self tableView] endUpdates];
但是在调用[[self tableView] endUpdates]
之后,它没有调用它的数据源方法。在添加行的情况下,它调用其数据源方法。我认为在删除的情况下它不需要向其数据源提出任何要求,但是在添加行的情况下,它需要向其数据源询问关于添加的新行的所有内容,如cellForRow,height等等。我只是想如果deleteRowsAtIndexPaths
没有调用任何数据源方法,那么确保它是正确的吗?
答案 0 :(得分:2)
deleteRowsAtIndexPaths:indexPaths
在所有情况下都不会调用委托方法。它只是简单地删除行,如果要删除的行太多以至于占用屏幕区域,那么它可能会调用您的委托方法。您必须显式调用reloadData
以便刷新其行。
但是立即调用reloadData
将破坏您的动画或产生奇怪的错误,因为它的行被删除并且您调用reload方法。 (可能会发疯)。另一种解决方案是在稍微延迟(如0.2或更大)之后调用reloadData
,如下所示:
[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationLeft];
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.2]; //calling reloadData after a short delay. 0.2 or whatever suits you.
不要忘记删除数据源阵列中的数据或用于保存数据的任何数据。
答案 1 :(得分:0)
答案是一个问题“如果视图已经被普及并且所有单元格都可用,它为什么要调用所有数据源和委托方法”? 好吧应该是行为