Sometimes when user go back to the previous UIViewController
, I want to do something.
If the user clicked the back button in UINavigationBar
, I can capture the event.
But if they use the swipe back gesture to go back, I cannot respond to the change.
So is there any callback for swipe back gesture?
Currently I can only disable this kind of page in my app through
interactivePopGestureRecognizer.enabled = NO;
The easiest way is to hook into the one that's already built into UINavigationController
by doing something like this:
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.interactivePopGestureRecognizer?.addTarget(self, action: #selector(MyViewController.handleBackswipe))
}
@objc private func handleBackswipe() {
navigationController?.interactivePopGestureRecognizer?.removeTarget(self, action: #selector(MyViewController.handleBackswipe))
// insert your custom code here
}
The remember to call removeTarget(_:action:)
in your selector, otherwise it'll spam your selector until the gesture ends.