如何禁用向后/向左滑动手势?

时间:2018-10-10 07:29:22

标签: ios swift uinavigationcontroller

您可以从屏幕左边缘轻​​扫以返回导航堆栈。但是在我的应用程序中,此行为与我的自定义左侧菜单冲突。因此,是否可以在UINavigationController中禁用此新手势?

3 个答案:

答案 0 :(得分:1)

您希望从控制器中启用/禁用它

迅速:

self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false // or true

ObjC:

self.navigationController.interactivePopGestureRecognizer.enabled = NO; // or YES

答案 1 :(得分:1)

对于我的用例,仅在单个视图控制器中将其禁用非常重要,因为该视图必须具有一个可以轻松干扰该手势的滑块。因此,我尝试按照建议在viewWillAppear中禁用它,该方法起作用了,但是在随后推送的控制器中一直禁用它。

然后我尝试在viewWillDisappear中启用它,但是确实以某种方式破坏了该应用程序。这意味着,如果我在子视图控制器中确实尝试使用向后滑动,则该应用程序冻结了。将其放到背景中并从那里重新打开可以消除冻结,但是具有讨厌的副作用,例如黑色背景,在错误的位置缺少搜索栏和其他ui元素。

最终使它对我有用的“窍门”是

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.interactivePopGestureRecognizer?.delegate = nil
}

并且没有将其设置回真正的代表,到目前为止,它确实可以工作

答案 2 :(得分:0)

此功能集并不是您所建议的新功能。如果没有错,它是在iOS 7中实现的,可以在所有后续发行版中找到。它称为InteractivePopGestureRecognizer。

https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621847-interactivepopgesturerecognizer

对我们来说幸运的是,Apple提供了一种禁用它的方法。在适当的位置将其设置为false。

self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false