UITableView删除,插入&在批量更新中移动排序

时间:2015-02-25 16:35:47

标签: uitableview

UITableViewbeginUpdates次呼叫之间的

endUpdates次更新被批量处理,并且所有呼叫都在同一时间执行。 Apple's documentation具体说明insertdelete操作的执行顺序:

  

动画块中的删除和重新加载操作指定应删除或重​​新加载原始表中的哪些行和部分; insertions指定应将哪些行和部分添加到结果表中。用于标识节和行的索引路径遵循此模型。另一方面,在可变数组中插入或移除项目可能会影响用于连续插入或移除操作的数组索引;例如,如果在某个索引处插入项目,则数组中所有后续项目的索引都会递增。

值得注意的是:

  

可以嵌套对beginUpdates和endUpdates的调用;所有索引都被视为只有外部更新块

[强调我的]

所以:考虑删除在第一遍中发生,然后在此之后发生任何插入,使用索引路径,>删除后

这很有用。 但是,我没有找到任何关于行(和部分)移动发生的位置,应该使用哪种索引以及这是否会影响其他步骤的文档。有人知道吗?

1 个答案:

答案 0 :(得分:7)

移动表格行时,指定两个索引:

  • indexPath原始表中从哪里获取此行
  • 结果表
  • newIndexPath此行将出现

    func moveRow(在indexPath:IndexPath,到newIndexPath:IndexPath)

单批处理中可能存在冲突操作,导致应用程序崩溃:

  • 尝试移动您还删除的行
  • 尝试将同一行移至多个目的地
  • 尝试将多行移至同一目的地
  • 尝试将行移至您插入新行的同一目的地

无法移动您要插入的行,因为原始表中没有该行。

默认情况下,移动的行不会从数据源重新加载。