在标签栏控制器中禁用和启用导航控制器向后滑动的正确方法

Kex*_*Kex 6 uitabbarcontroller uinavigationcontroller uigesturerecognizer ios swift

我有一个TabBarController三个标签。第一个和最后一个选项卡是导航控制器,我希望在其中启用向后滑动。中间选项卡只是一个标准的viewController. 默认情况下,似乎未启用向后滑动。我想那是因为我在这两个中使用了后退按钮navigationControllers。我在两个导航控制器的根视图控制器中尝试了以下代码来启用它:

viewDidLoad

self.navigationController?.interactivePopGestureRecognizer?.delegate = self
Run Code Online (Sandbox Code Playgroud)

并符合UIGestureRecognizerDelegate

func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {

        if (self.navigationController?.viewControllers.count)! > 1 {
            return true
        }

        return false
    }
Run Code Online (Sandbox Code Playgroud)

滑动返回工作现在可以正常工作,但是如果一个视图控制器将另一个视图控制器推到 UI 顶部,应用程序将全部冻结。在 Swift 中启用和禁用回扫的正确方法是什么?

小智 5

对于像我这样在 2 年后发现这个没有答案的人

视图控制器

在:viewDidAppear

self.navigationController?.interactivePopGestureRecognizer?.delegate = self
Run Code Online (Sandbox Code Playgroud)

和你的 UIGestureRecognizerDelegate

extension YourViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if gestureRecognizer.isEqual(navigationController?.interactivePopGestureRecognizer) {
        navigationController?.popViewController(animated: true)
    }
    return false
}
Run Code Online (Sandbox Code Playgroud)


Ras*_*n L 3

实现这一目标的两个步骤:

  1. 将其添加UIGestureRecognizerDelegate到您的类继承中
  2. 添加viewDidLoad以下内容:

启用向后滑动:

navigationController?.interactivePopGestureRecognizer?.isEnabled = true
Run Code Online (Sandbox Code Playgroud)

禁用向后滑动:

navigationController?.interactivePopGestureRecognizer?.isEnabled = false
Run Code Online (Sandbox Code Playgroud)