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。
以上。