UITableView允许您使用beginUpdates和endUpdates批量编辑操作.
我的问题是:我是否需要先知道它是删除还是插入?或者我可以在beginUpdates之前通过索引路径引用所有内容,它会神奇地工作吗?
假设我有一张桌子:
A (currently index path 0,0) B (0,1) C (0,2) D (0,3) E (0,4) F (0,5)
我想把它变成:
A (0,0) C (0,1) D (0,2) H (0,5)
因此,我删除了B(在0,1处)并且插入了H(在D-之后插入删除之前的0,4或之后的0,3).
那么,在我的开始/结束更新调用之间,哪些会起作用?
> deleteRowsAtIndexPaths:0,1,后跟insertRowsAtIndexPaths:
0,4
> deleteRowsAtIndexPaths:0,后跟
insertRowsAtIndexPaths:0,3
> insertRowsAtIndexPaths:0,4,然后是deleteRowsAtIndexPaths:0,1
> insertRowsAtIndexPaths:0,3,1
解决方法
相关的Apple文档是在
Ordering of Operations and Index Paths之下.
Deletion and reloading operations within an animation block specify which rows and sections in the original table should be removed or reloaded; insertions specify which rows and sections should be added to the resulting table. The index paths used to identify sections and rows follow this model.
因此,表视图将首先执行任何删除或更新操作,其索引路径引用原始表内容中的索引路径.然后执行插入,并且这些索引路径引用删除发生后的索引路径.
所以理论上你的数字’2’选项应该是你想要的.