You can add a category to the UINavigationController to display several controllers at once.
UINavigationController + VariablePop.h
UINavigationController + VariablePop.m #import "UINavigationController + VariablePop.h"
@implementation UINavigationController (VariablePop) - (NSArray *)popViewControllers:(int)numPops animated:(BOOL)animated { NSMutableArray* returnedControllers = [NSMutableArray array]; int indexToPopTo = self.viewControllers.count - numPops - 1; for(int i = indexToPopTo+1; i < self.viewControllers.count; i++) { UIViewController* controller = [self.viewControllers objectAtIndex:i]; [returnedControllers addObject:controller]; } UIViewController* controllerToPopTo = [self.viewControllers objectAtIndex:indexToPopTo]; [self popToViewController:controllerToPopTo animated:YES]; return returnedControllers; } @end
And then from the view controller you can:
NSArray* poppedControllers = [self.navigationController popViewControllers:2 animated:YES];
source share