【问题标题】:Dismissing 3 layers of modal view关闭 3 层模态视图
【发布时间】:2012-11-10 09:18:43
【问题描述】:

在我的应用程序中,我有三层模式视图控制器。

1) 所以我的rootViewController 是tabbar。

2) 在applicationDidFinishLaunching 上,我正在呈现viewController,例如viewController A 模态在tabbar 上方。

3) 单击“viewController A”中的按钮时,我会以模态方式呈现另一个viewController B。

4) 在viewController B 上的按钮操作以模态方式将navigationController 与其rootViewController 呈现为viewController C。

5) 最后从viewController C,我想回到viewController A。

我尝试过使用

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

在viewController C,但它让我回到viewController B而不是viewController A。

我怎样才能恢复到viewController A。

任何帮助将不胜感激。

【问题讨论】:

    标签: iphone ios xcode ipad ios5


    【解决方案1】:

    将所有“模态”视图推送到具有类似于 modalTransitionStyle..dont 的转换样式的 navigationControl 上

    在一个模态navigationController Id 中呈现所有内容:)

    【讨论】:

      【解决方案2】:

      您有一个复杂的 VC 堆栈。你可以像一位发帖人建议的那样实现一个自定义的dismissView方法,但这会很脆弱:如果你重用这个视图,或者在你的应用程序中移动它,它将停止运行,因为它过于依赖于其他VC如何配置的特定知识他们的状态。

      您可以配置委托链。这将是操作视图的标准方式:呈现的 VC 还负责删除它呈现的任何内容。

      为此,构建一个由 B 实现的协议,并使用对 B 的引用来初始化 C。类似地,使用对 A 的引用来初始化 B(可能使用相同的协议,具体取决于需要在它们之间传递的任何其他通信)他们。)

      然后当 C 上的按钮被点击时,它会调用 B 的委托方法。 B 适当地展开 C,并调用 A 的委托方法。 A 适当地展开 B。

      这具有保持 VC 知识封装的优点:A 知道它如何呈现 B,因此它知道如何取消呈现它,而 B 知道它如何呈现 C,并且知道如何取消呈现它。在任何情况下,一个 VC 都不需要假设另一个 VC 是如何呈现它的。

      【讨论】:

        【解决方案3】:

        实现视图关闭方法,如:

        - (IBAction)dismissView
         {
           [self dismissModalViewControllerAnimated:NO];   // dismiss c
           [[self parentViewController] dismissModalViewControllerAnimated:NO]; //dismiss b
         }
        

        [self parentViewController] 将返回viewControllerC 的父视图,即viewControllerB。所以它也会忽略这种观点。

        【讨论】:

        • 给出相同的结果。视图控制器 B 出现在屏幕上,而不是视图控制器 A
        • 试一试:写[[[[self parentViewController] parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];会发生什么?
        • 什么都没有!!停留在同一个屏幕上。该死的,这太疯狂了。
        • @footyapps27: 对不起,伙计:(我也很困惑。如果你得到修复,请发布答案或让我知道 :)
        • 嗨@footyapps27 这可以通过一些解决方法来完成,例如使用一些 bool ivar 来关闭视图控制器 b 会出现 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-02
        • 2011-12-26
        • 2014-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多