Search code examples
iosobjective-cuinavigationcontroller

Is there any callback for swipe back gesture in iOS?


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;

Solution

  • 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.