UITableVIewCellでLongTapを検知する

UITableVIewCellでLongTap(ジェスチャー)を検知する時のメモ。

UITableVIewCellの内容に応じてLongTapした時のイベントを振り分けるというUIを作ろうと思い、少し考えました。

最初、Sotryboard上UITableViewCellのContentViewにLong Press Gesture Recognizerを追加してあげれば良いのかなあと思っていたら、
Cell毎に設定してしまうと、都度インスタンスが生成されるし、メモリ管理的にもバットプラクティスのようでした…

UITableViewに対してLong Press Gesture Recognizerを追加して、イベント発生時の座標情報からNSIndexPathを取得するというのが、ベストプラクティスのようです。

CGPoint point = [self.longTapGestureRecognizer locationInView: self.tableView];
 NSIndexPath* indexPath = [self.tableView indexPathForRowAtPoint: point];

if( indexPath ) {
  UITableViewCell* cell = [self.tableView cellForRowAtIndexPath: indexPath];
 }

※事前にStoryboard上でUITableViewに対して、LongTapGestureRecognizerを追加して、OutletとActionを設定しています。

LongTapのイベントは、指を離した際も呼ばれるので、フラグで最初のイベントのみを受け取るように制御したらOK。

以上。

タイトルとURLをコピーしました