在iOS 4中,如果要关闭两个嵌套的模态视图控制器,则以下代码有效:
[[[[self parentViewController] parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];
然而,在iOS 5中,此方法不再有效。有人知道如何在iOS 5中实现这个结果吗?
答案 0 :(得分:10)
如果在呈现第一个模态的视图控制器上调用dismissViewControllerAnimated:,您将立即关闭两个模态。因此,在您的第二个模态中,您将执行以下操作:
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
答案 1 :(得分:8)
我有一个应用程序通过NSNotificationCenter关闭嵌套的模态视图控制器。 VC收到我想要导航回来的通知,其间的所有VC都消失了。
在更深层的VC ......
NSNotification * notification = [NSNotification notificationWithName:@"BACKTOINDEXNOTE" object:nil];
[[NSNotificationCenter defaultCenter] postNotification:notification];
在VC中我想回到
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismiss) name:@"BACKTOINDEXNOTE" object:nil];
// more init code
}
return self;
}
-(void)dismiss
{
[self dismissModalViewControllerAnimated:YES];
}
这适用于iOS 5设备,项目部署为4.0+ 我希望它有所帮助。如果您使用它,它将扩展以支持当前VC和您要关闭的VC之间的更多VC,而不更改此代码
答案 2 :(得分:0)
对于两个模态的堆栈,请在初始演示者的委托方法中调用此宝贝,然后跳回堆栈并核实所呈现的VC。
[self.presentedViewController.presentedViewController dismissViewControllerAnimated:NO completion:nil];
[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
显然它有点脆弱,因为如果你开始添加更多模态,那么事情就会破裂。一般来说,如果你正在做一堆控制器,你会使用UINavigationController,但是对于几个模态,这可以解决问题,并且比设置通知甚至更多代表要复杂得多!