Edited at

UITableViewの、どのセルをロングタップしたかを知りたいとき

More than 3 years have passed since last update.


仕込み


// 適当なタイミングでUITableViewにUILongPressGestureRecognizerをaddする
- (void)hoge {

UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(fuga:)];
[_tableView addGestureRecognizer:longPressGestureRecognizer];

}



本題


- (void)fuga:(UILongPressGestureRecognizer*)gestureRecognizer {
// ロングタップの開始時だけこのメソッドを実行する
if (gestureRecognizer.state != UIGestureRecognizerStateBegan) {
return;
}

// UILongPressGestureRecognizerからlocationInView:を使ってタップした場所のCGPointを取得する
CGPoint p = [gestureRecognizer locationInView:_tableView];
// 取得したCGPointを利用して、indexPathForRowAtPoint:でタップした場所のNSIndexPathを取得する
NSIndexPath *indexPath = [_tableView indexPathForRowAtPoint:p];
// NSIndexPathを利用して、cellForRowAtIndexPath:で該当でUITableViewCellを取得する
UITableViewCell *cell = [_tableView cellForRowAtIndexPath:indexPath];
}


という感じで、ロングタップした場所の座標から取得したNSIndexPathを利用してUITableViewCellを取得することが出来ます。