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

2011/08/18 (2016/09/14更新) タグ:
  • このエントリーをはてなブックマークに追加

tableviewにて、セルを長押した時に、アクションシートを表示させたい。こんなシーンは数多くありますが、セルの中でlongPressRecognizerを生成すると、都度インスタンスを生成して削除して…の繰り返しのため、メモリ的にも動作に影響がありました。

SPONSOR

そこで、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の値を取り出すことが出来ます。

この記事もおすすめ
記事を書いている中の人
入江慎吾
デザインも開発もやっているフリーのエンジニアです。目標はプロダクトだけで生きていくこと。そのために学んだこと、実践したことをブログで発信中。朝5時に起きて午前中だけ働いています。午後からは読書と勉強にあてて自己スキルをのばし、さらに生産性を高めたいと考えてます。(もっと詳しいプロフィール
この記事をシェアする
  • このエントリーをはてなブックマークに追加
メールマガジンで新着記事をフォロー

 

イリテクの最新情報をチェック!
  • follow us in feedly
    RSSで最新記事を読む
イリテクで開発したプロダクト
SPONSOR
こちらの記事もおすすめです