UITableView の行の並べ替えをセクションに制限する方法 質問する

UITableView の行の並べ替えをセクションに制限する方法 質問する

この件で頭を悩ませ、Google で検索しても何も出てきませんでした。最終的に解決したので、次に読む人のためにここに書いておこうと思いました。

複数のセクションを持つテーブルがありますUITableView。各セクションは同質ですが、テーブル全体は異質です。したがって、セクション内で行の並べ替えを許可したいが、横切ってセクション。おそらく、1 つのセクションだけを並べ替え可能にしたいだけでしょう (私の場合がそうでした)。私と同じように、 を見ると、UITableViewDataSourceDelegateセクション間で行を移動できるようになるときに通知は表示されません。行の移動が開始されたときに通知が 1 つ表示され (これは問題ありません)、すでに行が移動されていて内部のものと同期する機会が与えられたときにも通知が 1 つ表示されます。役に立ちません。

では、セクション間の順序変更を防ぐにはどうすればよいでしょうか?

私が行った回答を別の回答として投稿し、他の誰かがさらに良い回答を投稿できるようにしておきます。

ベストアンサー1

この実装により、Phil の回答のように元のセクション外での並べ替えが防止されますが、ドラッグが開始した場所ではなく、ドラッグが行われた場所に応じて、レコードがセクションの最初の行または最後の行にスナップされます。

- (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath
{
  if (sourceIndexPath.section != proposedDestinationIndexPath.section) {
    NSInteger row = 0;
    if (sourceIndexPath.section < proposedDestinationIndexPath.section) {
      row = [tableView numberOfRowsInSection:sourceIndexPath.section] - 1;
    }
    return [NSIndexPath indexPathForRow:row inSection:sourceIndexPath.section];     
  }

  return proposedDestinationIndexPath;
}

おすすめ記事