从模态视图控制器推送UIViewController

时间:2011-05-04 22:43:15

标签: iphone xcode uinavigationcontroller

我正在尝试制作的iPad应用中使用拆分视图控制器。

现在,我使用以下方式在模态视图控制器中显示视图:

[self presentModalViewController:viewController animated:YES];

并且工作正常,但是当用户按下按钮时,我希望根视图控制器推送到另一个视图。我正在使用:

RootViewController *rvc = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
[rcv pushViewController:rvc animated:YES];

但这不起作用。我该怎么办?

- 修改

现在,我正在使用

PhotosViewController *pv = [[PhotosViewController alloc] initWithNibName:@"PhotosViewController" bundle:nil];
[self.parentViewController.navigationController pushViewController:pv animated:YES];
NSLog(@"Navigation Controller: %@", self.parentViewController.naviagtionController);

当我执行NSLog调用时,它返回nil。那是为什么?

再一次,我正在使用拆分视图控制器,并尝试将RootViewController推送到新视图。

由于

2 个答案:

答案 0 :(得分:6)

您的代码无效,因为您创建了一个RootViewController实例,然后尝试将其推送到自身。您应该做的是将新视图控制器推送到父视图控制器的导航控制器:

[self.parentViewController.navigationController pushViewController:newViewController animated:YES];

答案 1 :(得分:3)

我知道这是一个老问题,但我相信“现在”从一个模态viewController将viewController推送到主导航堆栈的正确方法是在模态上创建一个“didTapShowBlahViewController”委托(假设你想要用户完成现有的模态视图,然后将新视图推送到堆栈上)。一旦你有了这个委托,你只需要有一个视图,最初调用模态来执行解除模态并在触发委托时推送下一个视图控制器。

- (void)didTapShowBlahViewController{
    [self dismissViewControllerAnimated:YES completion: nil];
    [self performSegueWithIdentifier:@"segueToBlahViewController" sender:self];
}

这基于Apple's View Controller Programming Guide,它指定将数据传递给子视图控制器并使用委托将数据传递回父级。

仅供参考:这种方式还可以确保“后退”按钮不会返回到模态,而是返回到调用模态的视图,这是通常使用模态的方式。