我有一个视图控制器,我需要添加一个自定义后退按钮。所以我添加了自定义backButtonItem
。但是在添加自定义后退按钮后,我的视图控制器通过滑动返回的默认行为会按预期停止工作。
如果我从视图控制器中删除自定义后退按钮,视图控制器的行为就像预期的那样,但只要我添加自定义后退按钮,默认行为就会停止。
我添加了这样的自定义后退按钮
self.navigationItem.leftBarButtonItem = getCustomBackBarButtonItem(viewController: self)
我尝试使用backBarButtonItem
代替leftBarButtonItem
,但通过这样做,自定义后退按钮不会出现,并且视图控制器的行为符合预期。
如果删除上面的代码,视图控制器的行为就像预期的那样,并且可以通过滑动顺利返回。
答案 0 :(得分:2)
不是将委托设置为自己,而只需添加以下行:
self.navigationController?.interactivePopGestureRecognizer?.delegate = nil
因此它不会进入任何交互式PopGestureRecognizer的委托方法,导航控制器的行为将符合您的期望。这是实现预期行为的小型解决方法。
答案 1 :(得分:1)
确保使用以下内容构建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
}
}
答案 2 :(得分:0)
导航回上一个viewController
初始化UIBarButton
var backBtn:UIBarButtonItem!
将UIBarButton添加到NavigationBar
backBtn = UIBarButtonItem(title: "Go-Back" , style: .plain, target: self, action: #selector(self.backBtnClicked(_:)))
self.navigationItem.leftBarButtonItem = backBtn
将此功能添加到您的课程中
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
}
}
希望这会对你有所帮助