0

UITableView文档说可以将对 、 和 的调用组合moveSection:toSection:insertSections:withRowAnimation:一个-deleteSections:withRowAnimation:beginUpdatesendUpdates。Table View Programming Guide 中名为Batch Insertion, Deletion, and Reloading of Rows and Sections的部分还解释了当在更新块中混合插入和删除时,无论方法的顺序如何,表视图都会在插入之前先进行删除来电。

我的问题是,当调用moveSection:toSection:与调用组合时insertSections:deleteSections:表格视图以什么顺序进行移动?或者,fromSectiontoSection是指删除之前、删除和插入之间还是插入之后的节索引?

4

1 回答 1

6

在尝试了一些代码之后,似乎在一个beginUpdates-endUpdates块中考虑一批更改的最佳方法是应用任何更新之前的部分顺序以及应用所有更新后的部分顺序. 如果U表示更新块之前的顺序,V表示更新块之后的顺序,则调用中使用的节索引deleteSections:和调用中的源索引moveSection:toSection:U中的索引,调用中使用的节索引insertSections:和目标索引moveSection:toSection:V中的索引。

因此,例如,为更改设置动画:

  0 C -> A 0
  1 高 1
  2 碳氢化合物 2
  3 公斤 3

你可以使用:

[tableView deleteSections:@[1] withRowAnimation:UITableViewRowAnimationAutomatic]; // delete F
[tableView insertSections:@[0] withRowAnimation:UITableViewRowAnimationAutomatic]; // insert A
[tableView moveSection:2 toSection:1]; // move H
[tableView moveSection:0 toSection:2]; // move C (implied by other changes so not necessary)

如果所做的其他更改暗示了某些移动,则无需明确进行。例如将 A 部分旋转到表格底部:

  0 A -> B 0
  1 公元前 1
  2 光盘 2
  3 大 3

以下在逻辑上是等价的:

[tableView moveSection:0 toSection:3];

[tableView moveSection:1 toSection:0];
[tableView moveSection:2 toSection:1];
[tableView moveSection:3 toSection:2];

然而,它们的动画略有不同。在第一种情况下,A 部分在其他部分上向下移动,而在第二种情况下,向上移动的三个部分在 A 部分上设置动画。

最后,似乎在为一组更改设置动画时,其中一些部分向下移动,另一些部分向上移动,不移动的部分位于底部,向下移动的部分位于其上方,而移动的部分up 在上面。

于 2012-10-29T22:59:43.413 回答