4

我正在勾画一个应用程序的工作流程,其中您有一个主菜单“Level 0”,它调用一个模态视图“Level 1”,它调用另一个模态视图“Level 2”。

我能够让这个工作,没问题,我可以通过使用以下方法来关闭整个堆栈:

[[[self parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];

在模态视图“2 级”中。

我的问题是,当模态视图“2 级”有导航栏时,我无法关闭整个堆栈。我上面列出的代码只让我回到了一个级别,所以它的行为真的和我这样做一样:

[self dismissModalViewControllerAnimated:YES];

在模态视图“2 级”上。

摘要:当模态视图“级别 1”使用以下命令调用模态视图“级别 2”时:

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

我可以关闭整个堆栈并返回主菜单(0 级)。但是当“1 级”使用如下导航栏调用“2 级”时:

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

我无法回到“0 级”,我只能回到“1 级”。

有什么建议么?

4

2 回答 2

2

我将为 2 级控制器创建一个协议,例如 Level2Delegate。然后将2级控制器的delegate设置为1级控制器。然后您可以执行以下操作:

2 级控制器将在 self.delegate 是 1 级控制器的情况下实现这一点

[self.delegate controllerDidFinish:self];

级别 1 将实施:

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

关键是建立一系列事件,而不是试图同时消除两者。

于 2010-07-11T20:43:22.343 回答
0

为什么不使用,

[self.navigationController popToRootViewControllerAnimated:YES];
于 2012-04-07T22:55:05.330 回答