不会调用UITableViewDataSource方法

时间:2013-05-08 10:01:24

标签: iphone objective-c uitableview

我正在使用以下代码更新我的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没有调用任何数据源方法,那么确保它是正确的吗?

2 个答案:

答案 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)

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