使用iPhone上的UINavigationController跳转到下一个控制器

时间:2010-08-24 02:59:58

标签: iphone objective-c uinavigationcontroller

该程序有一个导航栏,通常在单击viewController1中的按钮时,它会转到viewController2。当单击viewController2中的按钮时,它将转到viewController3。并且用户可以使用导航栏中的后退按钮从viewController3导航回viewController2然后导航到viewController1。

我想创建一个按钮,以编程方式将用户从viewController1直接带到viewController3。然后用户可以从viewController3导航回viewController2到viewController1。

有没有办法将两个视图推入导航控制器?或者是实现理想行为的另一种方式?我应该如何设计呢?

3 个答案:

答案 0 :(得分:9)

很抱歉误读了您的问题。因为你想要推动2个视图控制器然后再返回1.我认为解决方案现在很简单。

你只需要推动视图控制器2次,1次没有动画,1次动画像这样:

[viewController1.navigationController pushViewController:viewController2 animated:NO];
[viewController2.navigationController pushViewController:viewController3 animated:YES];

因此,对于用户来说,它就像你只推1但在场景后面,你实际上推了2个视图控制器。然后当你想要回来时,只需要逐个弹出。

答案 1 :(得分:4)

您可以使用直接在UINavigationController上设置导航堆栈。 setViewControllers:animated:

例如,假设此代码在viewController1中的某个位置,就像按钮的处理程序一样,按下它的视图:

NSMutableArray* viewControllers = [self.navigationController.viewControllers mutableCopy];
UIViewController* controller = [[MyViewController2 alloc] init];
[viewControllers addObject:controller];
[controller release];
controller = [[MyViewController3 alloc] init];
[viewControllers addObject:controller];
[controller release];
[self.navigationController setViewControllers:viewControllers animated:YES];

使用mutableCopy调用的顶部创建业务是为了保存导航堆栈中已有的内容。

答案 2 :(得分:0)

可以一次推送2个视图控制器,但是一旦你按下第一个视图控制器,当前ViewController上的navigationController属性将变为nil,因为它不再位于堆栈顶部,因此你必须对它进行引用。我一直没试过用动画一次推2,我不确定那会是什么样的。

相关问题