您使用的是 iOS 5 吗?
如果是这样,您看到的问题是由于此处记录的更改:http: //developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/ instp/UIViewController/parentViewController
该链接的重要一点是:
在 iOS 5.0 之前,如果视图没有父视图控制器并且以模态方式呈现,则将返回呈现它的视图控制器。这已不再是这种情况。您可以使用 presentingViewController 属性获取呈现视图控制器。
因此更改为 self.presentingViewController 可能会解决您的问题,但可能不会。
使用您的第一个模式中的此代码:
[self dismissModalViewControllerAnimated:YES];
SecondViewController *sec = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
sec.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.presentingViewController presentModalViewController:sec animated:YES];
您看不到新的视图控制器。
在您想使用新的(从 iOS5 开始)方法之后,要获得您的身份:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
此方法是推荐的 presentModalViewController 替代方法。
以及您的第一个视图控制器上的自定义方法,例如:
- (void)cycleModalViewControllersWithController:(UIViewController *)newViewController
该方法既可以关闭您当前的模态,也可以呈现新的模态,如下所示:
- (void)cycleModalViewControllersWithController:(UIViewController *)newViewController {
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:newViewController animated:YES completion:NULL];
}];
}
使用完成块来启动新的模态让我们等到旧的模态动画出来。因此,在您的第二个模态视图控制器中,您将在您的第一个模态视图控制器上调用您的自定义方法,并让它管理解除/呈现新的。