I want to call a new view controller and remove the current view controller from the navigation controller stack. For example. I am in view controller A and I call B.
Now I have in the stack A , B. Now I want to call C (from B). I want the stack to be A, C.
Thanks.
To remove the second-from-last navigation item:
For example, run this from
viewDidLoad
on controller C to remove controller B from the navigation stack.This is the answer.
The following code pops the current view controller.
And this pushes the new one:
Hope it helps!
In the context of ARC, here's a possible solution:
As you can tell, this code replaces the usual push code in the view you're trying to remove from stack ("B," in your question). Line 1 copies the list of view controllers from the nav-controller stack into an
NSMutableArray
. Line 2 replaces the last (topmost) view with the view we want to go to next ("C"). Line 3 makes the actual nav-controller's stack to be our altered array, and animates the transition to the topmost item. (Of course you can't use this code in the root viewController.)I found an alternative way here and adapted it for ARC:
The first line is needed because once you've popped the current view off the stack,
self.navigationController
will benil
and the third line won't work. Same number of lines as the previous way, but this way works through built-in methods instead of "manually" fiddling with the stack.You can use this code.
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; [navigationArray removeAllObjects]; self.navigationController.viewControllers = navigationArray;
Hope that will work for you.
I think you can do this by first popping B from navigation stack and then pushing C into it. You should be able to use [UINavigationController popViewControllerAnimated] and [UINavigationController pushViewController:animated] for this.