我正在绘制一个应用程序的工作流程,其中你有一个主菜单'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级'。
有什么建议吗?
答案 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];