如何在NavigationController上弹出UIViewController并同时推送UIView

时间:2012-10-17 11:10:16

标签: iphone ios uiviewcontroller uinavigationcontroller

我在UINavigationController ...

面临问题

我有这个层次结构

UINavigationController
 |- root controller
 |- ViewController A

我在ViewController A做了一个按钮,然后推送ViewController B,但我想在添加ViewController A之前删除ViewController B

因此,在流程

之后,层次结构就是这样的
UINavigationController
 |- root controller
 |- ViewController B

它应该从ViewController A滑动到ViewController B,但是如果你按下它,它会返回到root Controller

提前谢谢。

4 个答案:

答案 0 :(得分:3)

您应该使用UINavigationController的setViewControllers方法,只需将根和viewController B添加为数组

//get the existing navigationController view stack
NSMutableArray* newViewControllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];

//drop the last viewController and replace it with the new one!
ViewControllerB *childController = [[ViewControllerB alloc] initWithNibName:@"ViewControllerB" bundle:nil];
[newViewControllers replaceObjectAtIndex:newViewControllers.count-1 withObject:self];

//set the new view Controllers in the navigationController Stack
[self.navigationController setViewControllers:newViewControllers animated:YES];

答案 1 :(得分:0)

这可能会对你有所帮助。

iphone NavigationController clear views stack

这是解决问题的另一种方法。如果您拥有所需视图控制器的实例,则可以随时弹出它。

答案 2 :(得分:0)

查看[UINavigationController setViewControllers:animated:]

[self.navigationController setViewControllers:@[rootViewController, viewControllerB] animated:YES];

这应该会产生推送动画。

但说实话:如果你有这样的UI,你最不喜欢首先使用NavigationController,因为这会让用户感到困惑。 UINavigationController实现的比喻非常简单。你真的不想搞砸了。您可能需要查看Apple人机界面指南,然后选择另一种显示您的观点的选项!

答案 3 :(得分:-2)

最好的方法是使用新的ViewController启动navigationController,而不是同时删除和推送..

来自ViewController A的推送,

[self.navigationController initWithRootViewController:ViewControllerB];