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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2099319/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-03 22:48:32  来源:igfitidea点击:

How to remove a specific view controller from uinavigationcontroller stack?

iphoneobjective-cuinavigationcontrollernavigation

提问by S.P.

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

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

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/

http://starterstep.wordpress.com/2009/03/05/changed-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

但是如何做进一步的处理..这个问题一直在追我..请回答我..提前谢谢

回答by Costique

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

回答by Jie Liu

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:

这是我的解决方案。您可以为您的视图控制器设置标签或固定属性,然后您可以遍历 uinavigationcontroller 堆栈以搜索目标视图控制器(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;