如何禁用 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 上的向右滑动手势?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 UITableView 上的左右滑动手势

向左或向右移动 UINavigationBar 标题的文本

如何禁用 UITableViewCell 上的删除操作?

在 UINavigationBar 中隐藏或禁用 UIBarButtonItem

iOS 7:禁用整个应用程序的 UINavigationBar 半透明

Ionic 2禁用没有导航栏的向后滑动