iPhone – 关闭父模态视图

我正在勾勒出一个应用程序的工作流程,其中你有一个主菜单’Level 0′,它调用一个模态视图’Level 1′,它调用另一个模态视图’Level 2′.

我能够使这个工作,没有问题我可以使用以下方法解雇整个堆栈:

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

在模态视图’Level 2’中.

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

[self dismissModalViewControllerAnimated:YES];

在模态视图’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级控制器创建一个协议,例如Level2Delegate.然后将2级控制器的委托设置为1级控制器.然后你可以做类似以下的事情:

2级控制器将实现此功能,其中self.delegate是1级控制器

[self.delegate controllerDidFinish:self];

1级将实施:

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

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

点赞