Ios UITableView开始更新()和结束更新()说明

Ios UITableView开始更新()和结束更新()说明,ios,swift,uitableview,Ios,Swift,Uitableview,我希望有人能澄清UITableView的beginUpdates()和endUpdates()的用法 如果我有多个更改(deleteRows,insertRows,moveRow等)调用,我是否应该像前面的调用已经完成一样使用后续调用 例如: 我的数据是[A,B,C](假设只有1节),我已将数据源更新为[B,D,C],我希望删除A,然后在B和C之间插入D,如果我执行以下操作: tableView.beginUpdates() tableView.deleteRows(at: [IndexPath

我希望有人能澄清
UITableView
beginUpdates()
endUpdates()
的用法

如果我有多个更改(
deleteRows
insertRows
moveRow
等)调用,我是否应该像前面的调用已经完成一样使用后续调用

例如:

我的数据是[A,B,C](假设只有1节),我已将数据源更新为[B,D,C],我希望删除A,然后在B和C之间插入D,如果我执行以下操作:

tableView.beginUpdates()
tableView.deleteRows(at: [IndexPath(row: 0, section: 0), with: .automatic)
tableView.insertRows(at: [IndexPath(row: 1, section: 0), with: .automatic)
tableView.endUpdates()
我假设删除发生在插入或删除之前

tableView.beginUpdates()
tableView.deleteRows(at: [IndexPath(row: 0, section: 0), with: .automatic)
tableView.insertRows(at: [IndexPath(row: 2, section: 0), with: .automatic)
tableView.endUpdates()
在哪里还不会发生删除


我使用的是Swift 4,虽然目标是iOS 9,所以我不能专门使用
PerformBatChUpdate
。非常感谢。

我想我已经找到了我想要的澄清。在标题“批量插入、删除和重新加载行和节”和副标题“操作顺序和索引路径”下

您可能已经注意到清单7-8所示的代码中有一些奇怪的地方。代码在调用insertRowsAtIndexPaths:withRowAnimation:后调用deleteRowsAtIndexPaths:withRowAnimation:方法。但是,这不是UITableView完成操作的顺序。它将推迟行或节的任何插入,直到处理完行或节的删除之后。表视图的行为方式与在更新块内调用的重载方法相同。在执行动画块之前,会对行和节的索引进行重载。无论插入、删除和重新加载方法调用的顺序如何,都会发生此行为

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


虽然这很难解释,但我认为这意味着问题中的第二个例子是正确的。

你是正确的。删除和重新加载用于原始表,请使用原始表索引路径。插入用于新表,使用INDExpath用于新表。和删除发生在插入之前。