UITableView批量更新中的删除,插入和移动排序

Ben*_*ohn 22 uitableview

UITableView更新beginUpdatesendUpdates调用之间的更新被批处理,并且所有操作都在同一时间执行.Apple的文档特定于执行顺序insertdelete执行操作:

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

值得注意的是:

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

[ 强调我的 ]

所以:考虑在第一次传递中发生的删除,然后使用删除产生的索引路径,然后在此之后发生任何插入.

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

pai*_*aiv 7

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

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

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

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

  • 试图移动你也删除的行
  • 试图将同一行移动到多个目的地
  • 试图将多行移动到同一目的地
  • 尝试将行移动到插入新行的同一目标

无法移动要插入的行,因为原始表中不存在该行.

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