如何'弹出'到视图控制器不在堆栈上

问题描述:

我有一个导航控制器(XCode4与故事板和ARC),其中segue连接到每个单独的ViewController(其中7个)。通常,我在Nav控制器中点击一行,将我带到正确的场景。但是,有时候我想用场景从场景“A”到场景“C”,然后从“C”到“B”,这些场景没有通过导航控制器放置在堆叠上。如何'弹出'到视图控制器不在堆栈上

这是否有可能(从场景“C”到场景“B”)?

UPDATE:这是把控制器堆栈上的代码:

EnterDataViewController *edvc = [[EnterDataViewController alloc]init]; 

NSMutableArray *ma = self.navigationController.viewControllers; 
[ma insertObject:edvc atIndex:1]; 
self.navigationController.viewControllers = ma; 
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex: 1] animated:YES]; 

插入下方的顶部的一个分层结构中的新的视图控制器,具有动画关闭。然后,弹出。 :)

+0

哇!听起来合乎逻辑....我在哪里可以找到一份文档或样本或者关于如何做到这一点的教程? – SpokaneDude 2012-04-26 20:18:39

+1

我刚刚阅读了'UINavigationController'文档。 – 2012-04-26 20:19:13

+0

这似乎只处理导航堆栈上的项目...(http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html)。你在同一个地方看吗? – SpokaneDude 2012-04-26 20:28:38

该堆栈是存储在UINavigationController'sviewControllers属性中的数组。使用它创建一个新的(可变的)数组,您可以只需insertObject:atIndex:1并将其分配回UINavigationController.viewControllers

+0

注意问题已更新的问题...按照您的建议添加了代码,但它始终返回到导航控制器场景,而不是我想要的场景。 – SpokaneDude 2012-04-26 21:05:16

+0

ma = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];像你一样离开休息。 – Mario 2012-04-27 13:07:03

+0

在[[ma insertObject:edvc atIndex:1];上生成错误; 'NSArray'没有可见的@interface声明选择器'insertObject:atIndex:' – SpokaneDude 2012-04-27 22:33:15

将新控制器插入到self.navigationController.viewControllers并不总是按预期工作,所以我建议从数组中获取所需的控制器,从头开始构建一个新数组,然后将此数组分配给导航控制器。

UIViewController *mainScreenController = [[self.navigationController viewControllers]objectAtIndex:0]; 
SecondScreenController *secondScreenController = [[SecondScreenController alloc]init];  
NSMutableArray *controllers = [[NSMutableArray alloc]initWithObjects:mainScreenController, secondScreenController, nil];  
[self.navigationController setViewControllers:controllers animated:YES];