iOSアプリ・Webシステム開発のイリテク

HOME > iOS プログラミング > UITableViewでLongPressRecognizer(長押し)を使う効率的な方法
2011.08.18

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

このエントリーをはてなブックマークに追加

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

このエントリーをはてなブックマークに追加

記事を書いている人

入江 慎吾 イリテク株式会社 代表
Web/iOSエンジニア。企画・デザイン・システム開発をワンストップで。
単なる制作ではなく、お客さまの一員となってともに考え、制作し、「攻めのIT投資」でビジネスを加速させます。

イリテクの最新記事をフォローしていただけると嬉しいです

  • follow us in feedly
    RSSで最新記事を取得

関連記事

SPONSER

SPONSOR

NEW ENTRIES
FACEBOOK
Twitter
CATEGORY
開発したWebサービス
RECRUIT
Webサービスを一緒に開発して頂けるPHPエンジニア募集!週1回のリモート勤務!