S.P.
S.P.

Reputation: 5435

How to remove a specific view controller from uinavigationcontroller stack?

I have a uinavigationcontroller. After logged in i want to remove viewcontrollers like RegisterViewController,LoginViewController etc from UInavigationcontroller stack..

I mean i have to remove a particular view controller from stack ? How its possible. ?

I checked this post

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller’s-root-view-controller/

So we can take it into an array like

NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers];

But how to do further process.. This question is hunting me for long time..Please answer me ..Thanks in advance

Upvotes: 30

Views: 36089

Answers (2)

Jie Liu
Jie Liu

Reputation: 11

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;

Upvotes: 1

Costique
Costique

Reputation: 23722

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

Upvotes: 86

Related Questions