UITableViewでLongPressRecognizer(長押し)を使う効率的な方法

tableviewにて、セルを長押した時に、アクションシートを表示させたい。こんなシーンは数多くありますが、セルの中でlongPressRecognizerを生成すると、都度インスタンスを生成して削除して…の繰り返しのため、メモリ的にも動作に影響がありました。
そこで、viewDidLoadにてUILongPressGestureRecognizerを生成。
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(rowButtonAction:)]; longPressRecognizer.allowableMovement = 15; longPressRecognizer.minimumPressDuration = 0.6f; [self.tableview addGestureRecognizer: longPressRecognizer];
のように、一度だけ生成します。
この状態だけだと、テーブルのどこを長押ししてもrowButtonActionが動く状態です。そして、どのセルかまでは判別出来ません。
そこで、rowButtonActionの中でどのセルが長押しされたかチェックします。
-(IBAction)rowButtonAction:(UILongPressGestureRecognizer *)gestureRecognizer { CGPoint p = [gestureRecognizer locationInView:tableviews]; NSIndexPath *indexPath = [tableviews indexPathForRowAtPoint:p]; if (indexPath == nil){ NSLog(@"long press on table view"); }else if (((UILongPressGestureRecognizer *)gestureRecognizer).state == UIGestureRecognizerStateBegan){ //セルが長押しされた場合の処理 } }
これで、indexPath.rowの値を取り出すことが出来ます。
[sc name=”ios”][sc name=”engeneer”]
SHARE
無料メルマガ
「好きなことで生きていく」をコンセプトに、ブログの新着コラムをお届けします。
無料メルマガ登録はこちら
PROFILE

入江 慎吾
あらゆるスキルが学べるパーソナルメンターサービスMENTAの代表/個人開発が好きでこれまでに30個ほどのWEBサービスやアプリを作ってきました/福岡のWEB制作会社勤務→フリーランスエンジニア→法人立ち上げ→M&A億単位の売却を経験。 (詳しいプロフィール)
あらゆるスキルが学べるパーソナルメンターサービスMENTAの代表/個人開発が好きでこれまでに30個ほどのWEBサービスやアプリを作ってきました/福岡のWEB制作会社勤務→フリーランスエンジニア→法人立ち上げ→M&A億単位の売却を経験。 (詳しいプロフィール)