我有一个uinavigationcontroller。登录后我想从UInavigationcontroller堆栈中删除诸如RegisterViewController,LoginViewController等视图控制器。
我的意思是我必须从堆栈中删除特定的视图控制器?怎么可能。 ?
我查了这篇文章
所以我们可以把它变成像
这样的数组NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers];
但是如何进一步处理..这个问题很长时间都在找我..请回答我..谢谢提前
答案 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;