向后滑动添加动作 swift 4

Adding an action to back swipes swift 4

我已将我的一个视图控制器中导航栏中的后退按钮更改为自定义按钮,并为该按钮提供了按下时要执行的操作:

self.navigationItem.hidesBackButton = true
let backButton = UIBarButtonItem(image: UIImage(named: "backArrow"), style: .plain, target: self, action: #selector(self.back))
self.navigationItem.leftBarButtonItem = backButton

这非常有效,我能够通过使用以下方式保持向后滑动以弹出视图控制器:

self.interactivePopGestureRecognizer?.isEnabled = true
self.interactivePopGestureRecognizer?.delegate = self

在我的导航控制器文件中。不幸的是,当我向后滑动时,我无法(或者我还没有弄清楚)在我的视图控制器中调用 back() 函数来更改后退按钮。我如何以及在何处检测到我正在滑动以返回,以便我可以在该特定视图控制器中调用返回功能?

喜欢这个回答可以直接订阅手势:

// In UINavigationController

override func viewDidLoad() {
    super.viewDidLoad()
    self.interactivePopGestureRecognizer?.addTarget(self, action:#selector(self.handlePopGesture))
}

@objc func handlePopGesture(gesture: UIGestureRecognizer) -> Void {
    if gesture.state == .began {
        back()
    }
}

您可能需要添加一些自定义逻辑来访问您的视图控制器的返回方法,例如:if let vc = visibleViewController as? MyViewController { vc.back() }