【问题标题】:Dismiss UIViewController or just init the topmost?关闭 UIViewController 还是只初始化最顶层?
【发布时间】:2012-02-16 13:19:08
【问题描述】:

我创建了一个 iPad 应用程序,其中有三个自定义 UIViewController。 VC1、VC2、VC3。 它就像一个层次结构,所以你必须一个接一个地通过每个阶段。

因此你不能直接从 VC1 跳转到 VC3。

但如果你在 VC3,你可以直接回到 VC2 或 VC1。 在 VC3 上,我可以打电话给dismissViewControllerAnimated 来展示 VC2 - 很酷。

但是,如果我想从 VC3 跳回 VC1,最好的方法是什么? 是否有理由只对 VC1 使用“alloc and init”然后presentViewController:animated:completion 会不好?

【问题讨论】:

    标签: ios uiviewcontroller


    【解决方案1】:

    是的,这很糟糕,因为 VC1 已经存在,你会有一个副本。 您可以使用它从 VC3 转到 VC1。

    [self.presentingViewController.presentedViewController dismissModalViewControllerAnimated:YES];
    

    【讨论】:

    • 感谢您的帮助。不幸的是,这没有帮助。如果我记录“self.presentedViewController”或“self.parentViewController”属性,我会得到空值。为什么?
    • 从 VC3 到 VC1 的解雇现在有效。但不像你所说的“[self.presentedViewController.presentedViewControllerdismissModalViewControllerAnimated:YES];”。它在我使用时起作用:“[self.presentingViewController.presentingViewControllerdismissViewControllerAnimated:YES completion:nil];”...谢谢!我上面的问题只是存在。我应该为此创建一个新线程吗?
    • 嗨,不,我的代码错了,抱歉,我会编辑它:) 不要担心创建一个新线程,这没有必要。如果此代码有效,您能否将此答案标记为已接受,以便访问此线程的人找到正确的代码?
    【解决方案2】:

    是的,分配 init 另一个 VC1 会很糟糕。

    只需将 VC1 委托给 VC3。

    当您想从 VC3 中关闭 VC1 和 VC2 时,只需调用“DismissAllVC”之类的委托方法 在 VC1 中进入 DismissAllVC 方法只需调用

    - (void)dismissModalViewControllerAnimated:(BOOL)animated
    

    这将关闭 VC2 和 VC3,因为它们是 VC1 的子级。

    这就是我要做的,因为父视图控制器应该始终对孩子的解雇负责。

    希望这会有所帮助;)

    【讨论】:

      猜你喜欢
      • 2020-10-26
      • 2011-05-03
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多