【问题标题】:iPhone - dismiss parent modal viewiPhone - 关闭父模式视图
【发布时间】:2010-07-11 20:27:11
【问题描述】:

我正在勾画一个应用程序的工作流程,其中您有一个主菜单“0 级”,它调用一个模态视图“1 级”,它调用另一个模态视图“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级”。

有什么建议吗?

【问题讨论】:

    标签: iphone uinavigationcontroller presentmodalviewcontroller


    【解决方案1】:

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

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

    [self.delegate controllerDidFinish:self];
    

    1 级将实施:

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

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

    【讨论】:

    • 谢谢。我已经设置了 Level2 协议,但我遇到了“将 2 级控制器的代表设置为 1 级控制器”的问题。我已经阅读了其他一些帖子,但我遇到了一个问题。
    • 当Level 1实例化Level 2控制器时,可以做level2.delegate = self;
    • 太棒了。谢谢瑞克,我明白了。
    【解决方案2】:

    为什么不使用,

    [self.navigationController popToRootViewControllerAnimated:YES];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 2011-10-10
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多