如何禁用 UINavigationBar 上的向右滑动手势?
Posted
技术标签:
【中文标题】如何禁用 UINavigationBar 上的向右滑动手势?【英文标题】:How to disable swipe right gesture on UINavigationBar? 【发布时间】:2014-02-18 10:09:41 【问题描述】:当我在导航栏上从左向右滑动时,我的导航控制器会弹出一个视图控制器。我已经看过this question 所以我知道我可以设置...
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
...但它只是禁用导航栏下方视图上的滑动,而不是导航栏本身。
我目前的解决方案是手动查找手势并禁用它。哪个有效,但不确定是否有更好的方法。导航栏好像没有interactivePopGestureRecognizer
这样的属性。
// This is inside a `UINavigationController` subclass.
for (UISwipeGestureRecognizer *gr in self.navigationBar.gestureRecognizers)
if ([gr isKindOfClass:[UISwipeGestureRecognizer class]] && gr.direction == UISwipeGestureRecognizerDirectionRight)
gr.enabled = NO;
【问题讨论】:
是的,没有这样的属性。你的方法似乎没问题。为方便起见,您可以在类别中定义只读属性。 你能让这个工作吗? 【参考方案1】:UIGestureRecognizerDelegate
有一个名为- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
的方法。
如果您能够指出触摸的视图是否为UINavigationBar
,只需使其返回“NO”。
这样的
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
return (![[[touch view] class] isSubclassOfClass:[UIControl class]]); // UIControl is whatever as you like.
【讨论】:
2天的努力,愉快轻松的解决了。谢谢你。我要补充的唯一事实是(在我的情况下) NavigationController.interactivePopGestureRecognizer.delegate 分配和 shouldReceiveTouch 函数被添加到 parentViewContoller,而不是 activeViewContoller。以上是关于如何禁用 UINavigationBar 上的向右滑动手势?的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationBar 中隐藏或禁用 UIBarButtonItem