仕込み
// 適当なタイミングで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を取得することが出来ます。