How to remove a specific view controller from uinavigationcontroller stack? How to remove a specific view controller from uinavigationcontroller stack? objective-c objective-c

How to remove a specific view controller from uinavigationcontroller stack?


NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];[allViewControllers removeObjectIdenticalTo: removedViewController];navigationController.viewControllers = allViewControllers;


Here is my solution. You can set the tag or a fixed property to your viewcontrollers, then you could traverse the uinavigationcontroller stack to search the target viewcontroller(vcToRemove) and remove it. This could be safer. The code:

NSInteger tag = vcToRemove.wvTag;NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers];        int i = 1;        for (i = 1; i <=[allViewControllers count]; i++) {            UIViewController *vc = [allViewControllers objectAtIndex:i];            if ([vc isKindOfClass:[MyWebViewController class]]) {                if (((MyWebViewController *)vc).wvTag == tag) {                    [allViewControllers removeObjectAtIndex:i];                    break;                }            }        }        vcToRemove.navigationController.viewControllers = allViewControllers;