如何“弹出”到不在堆栈上的视图控制器

时间:2012-04-26 20:09:29

标签: objective-c ios xcode4

我有一个导航控制器(带有故事板和ARC的XCode4),其中segue连接到每个单独的ViewController(其中7个)。通常,我在Nav控制器中点击一行,它将我带到正确的场景。但是,有时我想使用segues从场景“A”转到场景“C”,然后从“C”转到“B”,它们没有通过导航控制器放在堆栈上。

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

更新:这是将控制器放在堆栈上的代码:

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];

3 个答案:

答案 0 :(得分:3)

将新视图控制器插入层次结构中的顶部控制器下方,并关闭动画。然后,弹出。 :)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

将新控制器插入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];