【Swift】TableView で長押しを検知してメニューやアラートダイアログを表示する簡単な方法・手順の備忘録【Xcode】

UITableView で長押しを検知したい

iOS アプリでリストを長押しした時に何らかの処理をしたいケースは多いと思います。

例えば以下のような用途ですね。

  • 長押しされたリストアイテムに対する操作メニューを表示する
  • アラートダイアログを表示する
  • リストを編集モードにする

UITableView に対する長押し操作を検知するための方法として、本記事では2つの方法をご紹介したいと思います。

1つ目の方法:メニューを表示する

長押しされたセルに対し、UIContextMenu という標準のメニューを表示する方法です。

こちらは、お馴染み UITableViewDelegate の tableView(_:contextMenuConfigurationForRowAt:point:) を実装することで簡単に対応することができます。

実際のコードを以下に示します。

実際の動作は以下のような感じになります。

2つ目の方法:TableView に UILongPressGestureRecognizer を設定する

こちらの方法は、UIGestureRecognizer の一つである UILongPressGestureRecognizer を TableView に設定する方法です。

手順としては以下の通りです。

  1. TableView に長押し検知用のジェスチャー(UILongPressGestureRecognizer)を設定する
  2. 長押しイベントを検知したら、TableView 上の指が離された位置のセルを取得する
  3. 長押しされたセルに対して何らかの処理(アラートダイアログを表示など)を行う

実際のコードを以下に示します。

実際の動作は以下のようになります。

おわりに

本記事で紹介した実装のサンプルコードを以下に公開しているので、興味のある方はご参照ください。

TableViewLongTapSample

参考文献

UIContextMenuConfiguration
UILongPressGestureRecognizer

スポンサードリンク