4

我正在绘制一个应用程序的工作流程,其中您有一个主菜单“0级”,调用模态视图'1级',调用另一个模态视图'2级'。iPhone - 关闭父模态视图

我能得到这个工作,没有问题,我能够通过使用驳回整个堆栈:

[[[self parentViewController] parentViewController] dismissModalViewControllerAnimated:YES]; 
在模态视图“二级”

我的问题是当模态视图'2级'有一个导航栏我不能解雇整个堆栈。

[self dismissModalViewControllerAnimated:YES]; 

模态视图“二级”:我上面列出的代码只所以它真正的作用一样,如果我做了这个让我回到了一个级别。

总结: 当模态视图“一级”调用模态视图使用以下第2等级:

Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease]; 
[self presentModalViewController:portalMainController animated:YES]; 

我可以关闭整个堆栈和回到主菜单(0级)。但是,当“一级”所谓的“二级”与类似下面的导航栏:

Level2 *level2 = [[[Level2 alloc] initWithNibName:@"Level2" bundle:nil] autorelease]; 
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:level2]; 
[self presentModalViewController:navigationController animated:YES]; 
[navigationController release]; 

我不能回到“0级”,我只有回到“1级”。

有什么建议吗?

回答

2

我会为Level2控制器创建一个协议,例如Level2Delegate。然后将2级控制器的代表设置为1级控制器。然后,你可以这样做以下:

2级控制器将实现这个地方self.delegate是1级控制器

[self.delegate controllerDidFinish:self]; 

1级将实现:

- (void)controllerDidFinish:(Level2Controller *)controller { 
    [[self parentViewController] dismissModalViewControllerAnimated:NO]; 
} 

的关键是建立一系列事件,而不是立即解雇。

+0

谢谢。我已经设置了一个Level2协议,但我遇到了一个问题:“将2级控制器的代理设置为1级控制器”。我已经阅读了其他一些帖子,但我有一个问题围绕着这个问题。 – CraigH 2010-07-11 22:07:55

+0

当1级实例化2级控制器时,可以执行level2.delegate = self; – rickharrison 2010-07-12 00:58:27

+0

太好了。谢谢瑞克,我明白了。 – CraigH 2010-07-12 01:05:21

0

为什么不使用,

[self.navigationController popToRootViewControllerAnimated:YES];