2

私のnavigationControllerのnavigationBarをクリック可能にしようとしています。それはうまく動作します

UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
                                    initWithTarget:self action:@selector(toggleMenu)];
tapRecon.delegate = self;
tapRecon.numberOfTapsRequired = 1;
[self.navigationBar addGestureRecognizer:tapRecon];

しかし、戻るボタンがある場合、それをクリックすることはできません (ジェスチャーがボタンを引き継ぐ可能性があります)。

だから、私はここにあるものを試しました:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return (![[[touch view] class] isSubclassOfClass:[UIButton class]]);
}

[touch view]常に UINavigationBarであるため、何もありません...

私が最後にやろうとしたことは、をに設定するcancelsTouchesInViewことNOです。大丈夫です。戻るボタンをクリックすることはできますが、toggleMenuアクションUITapGestureRecognizerはまだ呼び出されています。

戻るボタンを再び機能させるアイデアはありますtoggleMenuか?

ありがとう !

編集 :

Juste は次の方法を見つけました。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    for (UIView* sub in self.navigationBar.subviews) {
        NSString *cl = NSStringFromClass([sub class]);
        if ([cl isEqualToString:@"UINavigationItemButtonView"]) {
            CGRect bback = sub.frame;
            CGPoint pointInView = [touch locationInView:gestureRecognizer.view];
            return !CGRectContainsPoint(bback, pointInView);
        }
    }
    return YES;
}
4

2 に答える 2

0

ナビゲーション バーを囲むボタンを作成し、戻るための別のボタンを作成できます。必ずIBのナビゲーションバーボタンの上に配置してください

于 2013-08-20T01:00:19.230 に答える
-2

これは Swift コードのソリューションです。

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    for view in self.navigationBar.subviews {
        if let button = view as? UIButton {
            if touch.view.isEqual(button) {
                return false
            }
        }
    }
    return true
}

これをデリゲートに入れるだけUIGestureRecognizerです。

于 2015-02-13T16:59:30.333 に答える