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
How to remove a specific view controller from uinavigationcontroller stack?
提问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/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;

