UITableView
和beginUpdates
次呼叫之间的 endUpdates
次更新被批量处理,并且所有呼叫都在同一时间执行。 Apple's documentation具体说明insert
和delete
操作的执行顺序:
动画块中的删除和重新加载操作指定应删除或重新加载原始表中的哪些行和部分; insertions指定应将哪些行和部分添加到结果表中。用于标识节和行的索引路径遵循此模型。另一方面,在可变数组中插入或移除项目可能会影响用于连续插入或移除操作的数组索引;例如,如果在某个索引处插入项目,则数组中所有后续项目的索引都会递增。
值得注意的是:
可以嵌套对beginUpdates和endUpdates的调用;所有索引都被视为只有外部更新块。
[强调我的]
所以:考虑删除在第一遍中发生,然后在此之后发生任何插入,使用新索引路径,>>删除后。
这很有用。 但是,我没有找到任何关于行(和部分)移动发生的位置,应该使用哪种索引以及这是否会影响其他步骤的文档。有人知道吗?
答案 0 :(得分:7)
移动表格行时,指定两个索引:
indexPath
在原始表中从哪里获取此行 newIndexPath
此行将出现
func moveRow(在indexPath:IndexPath,到newIndexPath:IndexPath)
单批处理中可能存在冲突操作,导致应用程序崩溃:
无法移动您要插入的行,因为原始表中没有该行。
默认情况下,移动的行不会从数据源重新加载。