1

我正在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、高度等。我只想如果deleteRowsAtIndexPaths不调用它的任何数据源方法,请确保它是正确的??

4

2 回答 2

2

deleteRowsAtIndexPaths:indexPaths在所有情况下都不会调用委托方法。它只是简单地删除行,如果被删除的行太多以至于它们占据了屏幕区域,那么它可能会调用您的委托方法。您必须显式调用reloadData以刷新其行。

但是立即调用reloadData会破坏您的动画或产生奇怪的错误,因为它的行正在被删除并且您调用 reload 方法。(它可能会发疯)reloadData另一种解决方案是在像 0.2 或更大这样的轻微延迟后调用:

[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.

不要忘记从数据源的数组或用于保存数据的任何东西中删除数据。

于 2013-05-08T10:20:04.067 回答
0

答案是一个问题“如果视图已经填充并且所有单元格都随时可用,为什么要调用所有数据源和委托方法”?好吧,应该是行为

于 2013-05-08T12:45:47.223 回答