繁体   English   中英

ios使导航栏可单击

[英]ios make navigation bar clickable

只是试图使我的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 可以,我们可以单击“后退”按钮,但仍会调用UITapGestureRecognizertoggleMenu操作。

您是否有一个使后退按钮再次工作但不同时调用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;
}

好吧,您可以制作一个围绕导航栏的按钮,并制作另一个用于按回的按钮。 确保将其布置在IB中的导航栏按钮上方

这是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的委托中即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM