swiftxcodeuinavigationcontrollernavigationcontroller

Check if Popped UIViewController gets dismissed by swipe


I want to check whenever the user swipes a popped viewController away. So for example when in whatsApp a user exits the current chat by swiping from the edge. How is that possible in Swift?

I don't want to use viewDidDisappear, because this method also gets called when another viewController is presented over the current viewController.


Solution

  • As I wrote in comment, a simple workaround would be in viewDidDisappear, check if the navigationController is nil.

    class MyVc: UIViewController {
    
        override func viewDidDisappear(_ animated: Bool) {
            super.viewDidDisappear(animated)
    
            if navigationController == nil {
                print("view controller has been popped")
            }
        }
    
    }
    

    Of course, this solution works only if the view controller is embedded into a navigation controller, otherwise the if statement will always be true.