导航栏的默认返回行为不起作用

Navigation Bar's Default behaviour to go back is not working

我有一个视图控制器,我需要在其中添加自定义后退按钮。所以我添加了一个自定义 backButtonItem。但是在添加自定义后退按钮后,我的视图控制器通过滑动返回的默认行为停止按预期工作。

如果我从视图控制器中删除自定义后退按钮,视图控制器的行为符合预期,但一旦我添加自定义后退按钮,默认行为就会停止。

我已经添加了这样的自定义后退按钮

self.navigationItem.leftBarButtonItem = getCustomBackBarButtonItem(viewController: self)

我曾尝试使用 backBarButtonItem 而不是 leftBarButtonItem,但这样做后自定义后退按钮不会出现,并且视图控制器的行为符合预期。

如果我删除上面的代码,视图控制器的行为就如预期的那样,它可以通过滑动顺利返回。

一定要像这样构建 UIBarButtonItem:

let customBack = UIBarButtonItem(title: "Back", style:.done, target:self, action: #selector(self.letsGoBack))

然后实现弹回功能:

@objc func letsGoBack() {
   self.navigationController?.popViewController(animated: true)
}

所以最后就是:

self.navigationItem.leftBarButtonItem = customBack

如果您想保留向后滑动手势,您可以将导航控制器子类化:

class YourNavigationController: UINavigationController, UIGestureRecognizerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.interactivePopGestureRecognizer?.delegate = self
    }

    public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return self.viewControllers.count > 1
    }
}

返回上一个 viewController

初始化 UIBarButton

var backBtn:UIBarButtonItem!

将 UIBarButton 添加到 NavigationBar

backBtn = UIBarButtonItem(title: "Go-Back" , style: .plain, target: self, action: #selector(self.backBtnClicked(_:)))

self.navigationItem.leftBarButtonItem = backBtn

将此功能添加到您的 class

func backBtnClicked(_ sender:UIBarButtonItem) {
   if let redirect = self.navigationController?.popViewController(animated: true) {
    // If you open this viewController by using pushViewController this will called
   } else {
      self.dismiss(animated: true, completion: nil) 
      // If you open this viewController by using present this will called
   }
}

希望对您有所帮助

您可以简单地添加以下行,而不是将委托设置为自己:

self.navigationController?.interactivePopGestureRecognizer?.delegate = nil

因此它不会转到任何交互式 PopGestureRecognizer 的委托方法,并且导航控制器的行为将符合您的期望。这是实现预期行为的小解决方法。