iPhone - 关闭父模态视图

时间:2010-07-11 20:27:12

标签: iphone uinavigationcontroller presentmodalviewcontroller

我正在绘制一个应用程序的工作流程,其中你有一个主菜单'Level 0',它调用一个模式视图'Level 1',它调用另一个模态视图'Level 2'。

我能够正常工作,没问题我可以使用以下方法解散整个堆栈:

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

在模态视图'Level 2'中。

我的问题是当模态视图'Level 2'有导航栏时我无法忽略整个堆栈。我上面列出的代码只会让我回到一个级别,所以它的行为与我这样做完全相同:

[self dismissModalViewControllerAnimated:YES];

关于模态视图'Level 2'。

要点: 当模态视图'Level 1'使用以下内容调用模态视图'Level 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级'。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我会为Level2控制器创建一个协议,例如Level2Delegate。然后将2级控制器的委托设置为1级控制器。然后你可以做类似以下的事情:

2级控制器将实现这一点,其中self.delegate是1级控制器

[self.delegate controllerDidFinish:self];

1级将实施:

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

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

答案 1 :(得分:0)

为什么不使用,

[self.navigationController popToRootViewControllerAnimated:YES];