我在更新 TableView 时遇到了一个棘手的问题,我使用不同的更新方法得到了不同的结果,让我解释一下:
情况一:
我使用 [tbl reloadData];
,其中 tbl
是我的 TableView,以更新 TableView - 按预期工作。
情况 2: 我使用:
[tbl beginUpdates];
[tbl reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
[tbl endUpdates];
tbl
是我的 TableView,indexPaths
是一个包含 TableView 中所有索引路径的数组。现在数组很好,它包含所有正确的索引路径(双重和三次检查)但出于某种原因 - 这没有按预期工作。
现在我意识到这是一个 X-Y 问题(我要求 Y,但我的问题实际上是 X,因为我认为解决 Y 会解决 X),那只是因为我觉得解释 X 有点复杂(说的结果上面的问题)以一种简单的方式,所以如果可能的话我宁愿避免这样做。
那么,回到我的问题:这两种更新 TableView 的方式是否有区别(当然除了动画部分)还是我应该怀疑问题出在其他地方? p>
编辑: 好的,我将尝试解释症状是什么:
在 cellForRowAtIndexPath
方法中,我为每个单元格添加了一个按钮,并分配了一个标签,该标签等于单元格的 indexPath 行,如下所示:
btn.tag = indexPath.row;
我这样做的原因是我可以识别每个按钮,因为它们都调用相同的函数:
- (void)btnPressed:(id)sender
然后当我更新单元格时 - 因为单元格中的某些值已更改 - 情况 1 使一切正常,但是情况 2 - 混淆了标签,因此下次按下其中一个按钮时,它们不再具有正确的标签。
在我看来,这种混淆确实是随机的,但随机化的发生方式不同,具体取决于我先按下哪个单元格按钮。我希望这能澄清我的问题。
最佳答案
来自UITableView
文档
beginUpdates
Begin a series of method calls that insert, delete, or select rows and sections of the receiver.
这意味着,除非您正在插入、删除或选择,否则您不应该使用它。这些你都没有做。
此外,您应该以 endUpdates
结束 beginUpdates
,而不是 reloadData
。文档:
This group of methods must conclude with an invocation of endUpdates.
关于ios - TableView reloadData 与 beginUpdates & endUpdates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174017/