LoginSignup
8
8

More than 5 years have passed since last update.

navigationItemにUILongPressGestureRecognizerを設定する方法

Posted at

rightBarButtonItemとかleftBarButtonItemにジェスチャーを追加する方法です。
これらはUIBarButtonItemです。
しかしaddGestureRecognizerはviewに対するメソッドなので、UIBarButtonItemには適用できません。
つまりUIBarButtonItemのviewさえ取得できればaddGestureRecognizerできるということです。

取得方法は色々あるみたいですが、KVCを使えば簡単に実現できます。

[self.navigationItem.rightBarButtonItem valueForKey:@"view"]

これだけでrightBarButtonItemのviewを取得できます。

実装は以下の通りです。
(GestureRecognizerインスタンスの取得にBlocksKitを使っていますが、本題はそこではないので了承ください)

    //UILongPressGestureRecognizerのインスタンス
    UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc]initWithHandler:^(UIGestureRecognizer *sender, UIGestureRecognizerState state, CGPoint location) {
        if (state == UIGestureRecognizerStateBegan) {
            NSLog(@"began");
        }
    } delay:0.4];
    //ジェスチャーの追加
    [[self.navigationItem.rightBarButtonItem valueForKey:@"view"]addGestureRecognizer:lpgr];

参考サイト(stack-overflow)

ってここまで書いてて思ったんですけど、これってrightBarButtonItemのプライベート変数にアクセスしてるのでリジェクト対象になったりするんですかね?

8
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8