0

UITableViewドキュメントには、moveSection:toSection:insertSections:withRowAnimation:、および-ブロックの呼び出しを組み合わせても問題ないと書かれています。Table View Programming Guide のBatch Insertion, Deletion, and Reloading of Rows and Sections と呼ばれるセクションでは、更新ブロック内で挿入と削除を混合する場合、メソッドの順序に関係なく、挿入を行う前にテーブル ビューが削除を行うことも説明しています。で電話をかけます。deleteSections:withRowAnimation:beginUpdatesendUpdates

私の質問は、 への呼び出しがおよびへのmoveSection:toSection:呼び出しと組み合わされた場合、テーブル ビューはどのような順序で移動しますか? あるいは、fromSectiontoSectionは、削除の前、削除と挿入の間、または挿入の後のセクション インデックスを参照しますか?insertSections:deleteSections:

4

1 に答える 1

6

beginUpdatesいくつかのコードを試した後、 -ブロック内の変更のバッチについて考える最良の方法endUpdatesは、更新が適用される前のセクションの順序と、すべての更新が適用された後のセクションの順序の条件であるように思われます. Uが更新ブロックの前の順序を表し、Vが更新ブロックの後の順序を表す場合、呼び出しで使用されるセクション インデックスdeleteSections:と のソース インデックスは、moveSection:toSection:U のインデックスで使用されるセクション インデックス、および呼び出しinsertSections:の宛先インデックスです。moveSection:toSection:Vのインデックスです。

たとえば、変更をアニメーション化するには、次のようにします。

  0 C -> A 0
  1 FH 1
  2HC2
  3 KK 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 CD2
  3 ダ 3

以下は論理的に同等です。

[tableView moveSection:0 toSection:3];

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

ただし、アニメーションはわずかに異なります。最初のケースでは、セクション A は他のセクションの上に移動してアニメーション化されますが、2 番目のケースでは、セクション A の上に移動する 3 つのセクションがアニメーション化されます。

最後に、下に移動するセクションと上に移動するセクションを含む一連の変更をアニメーション化すると、移動しないセクションが下にあり、下に移動するセクションがその上にあり、移動するセクションが表示されます。上が上です。

于 2012-10-29T22:59:43.413 に答える