我有一个tableView,它会定期由来自远程服务的数据进行更新。我加载数据,并存储刚插入,删除或更新的各种数据的indexPaths。然后,我有一个begin / endUpdates块,可以完成必要的操作,如下所示。
[self.tableView beginUpdates];
if (pathsToDelete) {
[self.tableView deleteRowsAtIndexPaths:pathsToDelete withRowAnimation:UITableViewRowAnimationNone];
}
if (pathsToRefresh) {
[self.tableView reloadRowsAtIndexPaths:pathsToRefresh withRowAnimation:UITableViewRowAnimationNone];
}
[self.tableView insertRowsAtIndexPaths:indexPathsToAdd withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
我最近注意到,单元的重新加载方式超出了我的预期。在调试器中,我注意到在刷新单个记录的情况下(即,pathToRefresh是唯一具有任何内容的记录,并且它只有一个索引),实际上整个表都在重新加载。那样的话,我的意思是我看到了表中每个单元格对dataSource的请求。
在调试中,我开始精简内容。我一直到只有我的地步
[self.tableView beginUpdates];
[self.tableView endUpdates];
即便如此,我仍然看到整个表都重新加载(即,针对数据源中的每个值都触发了cellForRowAtIndexPath)。所以我以为我错过了其他事情..但是删除这两种方法导致重新加载停止。
万一没有任何内容,begin / endUpdates不应该什么都不做?我对这里实际发生的事情不知所措,因为该文档表明它们所做的只是书挡表操作-在这种情况下,我没有任何操作。
最佳答案
objective-c iOS reloadRowsAtIndexPaths,reloadSections
if([self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1 == -1){
row = 0;
}else{
row = [self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1 ;
}
NSIndexPath* indexPath = [NSIndexPath indexPathForRow: (row) inSection: ([self.tableView numberOfSections]-1)];
// [self.tableView reloadData];
[self.tableView beginUpdates];
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
NSLog(@”Number of Sections %ld”, (long)[self.tableView numberOfSections]);
NSLog(@”Number of Rows %ld”, [self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1);
关于ios - tableView beginUpdates/endUpdates block 重新加载整个表,即使为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710509/