如何从uinavigationcontroller堆栈中删除特定的视图控制器?

时间:2010-01-20 05:51:42

标签: iphone objective-c uinavigationcontroller navigation

我有一个uinavigationcontroller。登录后我想从UInavigationcontroller堆栈中删除诸如RegisterViewController,LoginViewController等视图控制器。

我的意思是我必须从堆栈中删除特定的视图控制器?怎么可能。 ?

我查了这篇文章

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

所以我们可以把它变成像

这样的数组
NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers];

但是如何进一步处理..这个问题很长时间都在找我..请回答我..谢谢提前

2 个答案:

答案 0 :(得分:84)

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

答案 1 :(得分:1)

这是我的解决方案。您可以将标记或固定属性设置为viewcontrollers,然后您可以遍历uinavigationcontroller堆栈以搜索目标viewcontroller(vcToRemove)并将其删除。这可能更安全。代码:

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;
相关问题