ドラッグ&ドロップでの並べ替えと長押しによるコンテキストは共存できるのか
iOSでは最近、リストUIでアイテムをドラッグ&ドロップで並べ替えるようなUIが流行っていますよね。
UITableView
や UICollectionView
では dragInteractionEnabled
dragDelegate
dropDelegate
をそれぞれ実装することで、ドラッグ&ドロップ時のアクションを追加することができます。
一方でiOS 13からは長押しでコンテキストメニューを表示させることができるようになりました。
これは UITableViewDelegate
の tableView(_:contextMenuConfigurationForRowAt:point:)
メソッドを使うと実装することができます。
このdelegateメソッドを実装するだけで、アイテムの長押しでコンテキストメニューを表示させることができます。
この2つはAPIとしても完全に独立しており、同時に実装することが可能です。
ではその場合、機能の共存は可能なのでしょうか
結論: 共存可能
そこで適当なUITableViewを使ったコードで実装してみたところ、 2つの機能は共存可能なようでした。
動作としては上の画像の通りで
- 長押しするとコンテキストメニューが表示される
- そこから一定距離をドラッグするとドラッグ&ドロップのジェスチャーに切り替わる
という感じになるようです。
意外と情報がなかったのでメモです。