Reputation: 311
I want to go back two levels on my view controller stack. I have three segues in this order: Show, Show, Present Modally. There is a navigation controller in use. From my 4th view I want to go back to the 2nd view. I have tried using
self.presentingViewController?.presentingViewController?.navigationController?.popViewControllerAnimated(false);
and
self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(false, completion: nil);
The second one works only if the 2nd and 3rd segues as 'Present Modally'. How can I get them to work with a dismiss and a pop?
Upvotes: 4
Views: 9717
Reputation: 310
Just call dismissViewControllerAnimated.It will automatically dismiss all view controllers including presented model viewcontroller.
Objective - C
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
Swift
self.navigationController?.dismissViewControllerAnimated(false, completion: nil);
Upvotes: -1
Reputation: 625
You can use this technique
https://stackoverflow.com/a/15839298/1153100
Simple and clean(Unwind segues)
@IBAction func unwindAction(segue: UIStoryboardSegue) {
}
Upvotes: 3
Reputation: 23893
You use like this one.
self.navigationController?.popViewControllerAnimated(true)
Upvotes: -1
Reputation: 37300
Try dismissing the presented view controller before popping the other two:
func dismissThenDoublePop() {
// Get the presenting/previous view
let previousView = self.presentingViewController as UINavigationController
// Dismiss the current view controller then pop the others
// upon completion
self.dismissViewControllerAnimated(true, completion: {
// Get an array of the current view controllers on your nav stack
let viewControllers: [UIViewController] = previousView.viewControllers as [UIViewController];
// Then either pop two view controllers, i.e. pop
// to viewControllers[viewControllers.count - 2], or
// pop to the second view controller in the nav stack,
// i.e. viewControllers[1]. (In this case I've used the
// first option.)
self.navigationController!.popToViewController(viewControllers[viewControllers.count - 2], animated: true);
});
}
Upvotes: 5