0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TableViewで一部のcellだけdrag&drop無効化、cellの入れ替えをさせない(swift)

Posted at

はじめに

  • 自分が調べたことを忘れないように記事に残しておくブログ的なものです
  • 今回は一部のcellのdrag&drop無効化したかったのと、その無効化しているcellの入れ替えも禁止したかったという内容になります

一部のcellだけdrag&dropさせない・cellの入れ替えをさせない

// MARK: - UITableViewDragDelegate

func tableView(
    _ tableView: UITableView, 
    itemsForBeginning session: UIDragSession, 
    at indexPath: IndexPath
) -> [UIDragItem] {
    // ここで特定のcellのdragを無効化できる(ここでは3番目が無効化)
    if indexPath.row == 2 {
        return []
    }
    let item = self.data[indexPath.row]
    let itemProvider = NSItemProvider(object: item as NSString)
    let dragItem = UIDragItem(itemProvider: itemProvider)
    return [dragItem]
}

// MARK: - UITableViewDropDelegate

func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -> UITableViewDropProposal {
    guard let destinationIndexPath = destinationIndexPath else {
        return UITableViewDropProposal(operation: .cancel)
    }

    // ここで無効なセルへのドロップ禁止できる(ここでは3番目へのドロップを無効化)
    if destinationIndexPath.row == 2 {
        return UITableViewDropProposal(operation: .forbidden)
    }

    return UITableViewDropProposal(operation: .move)
}

おまけ: drag&dropを無効化しているcellが動かないように固定する

  • 別のcellをdragしている時にdrag&drop無効化しているcellにdrag中のcellを重ねた場合、drag&dropを無効化しているcellが移動してしまっていたので以下のコードで移動しないよう完全に固定化しました
// MARK: - UITableViewDelegate

func tableView(_ tableView: UITableView, targetIndexPathForMoveFromRowAt sourceIndexPath: IndexPath, toProposedIndexPath proposedDestinationIndexPath: IndexPath) -> IndexPath {
    // ここで指定したcellの動きを無効化できる(ここでは3番目のcellの動きを無効化)
    return proposedDestinationIndexPath.row == 2 ? sourceIndexPath : proposedDestinationIndexPath
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?