【问题标题】:dismissModalViewController issue in iOsiOs 中的dismissModalViewController 问题
【发布时间】:2012-07-24 08:45:11
【问题描述】:

我有三个视图控制器,比如 A、B 和 C。我正在浏览这些视图,如下所示;

A -presenting-> B -presenting-> C -presenting-> B

如果我从 B 关闭,我想导航到 C。但取而代之的是,现在它正在移动到 A。我不能使用解除从 C 导航到 B(一些内部问题)。那么我该如何解决这个问题呢?请帮忙。

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/5935462/… 我相信还有更多...
  • 我看到了那个帖子并试图解决这个问题,但仍然没有工作。
  • 您是否使用UINavigationController 在视图之间导航?
  • 不,我没有使用 UINavigationController。

标签: iphone uiviewcontroller navigation presentmodalviewcontroller dismiss


【解决方案1】:

您遇到了dismissModalViewController 的限制:它将删除您所有的模态视图 (source):

如果您连续呈现多个视图控制器,从而构建一组呈现的视图控制器,则在堆栈中较低的视图控制器上调用此方法会关闭其直接子视图控制器以及堆栈上该子视图控制器上方的所有视图控制器。发生这种情况时,只有最顶层的视图会以动画方式消失;任何中间视图控制器都简单地从堆栈中删除。最顶层的视图使用其模态转换样式被解除,这可能与堆栈中其他视图控制器使用的样式不同。

您可以做的是使用UINavigationController 并根据您的要求简单地将控制器推送/弹出。

或者,您可以通过在顶视图上直接调用addSubview 并确保它们覆盖整个屏幕并且正确保留/释放管理控制器来简单地显示由您拥有的各种控制器管理的视图(视图是当您将其添加/删除到另一个视图时自动)。

作为提示,您可以这样做:

  1. 如果你有presentModal...,使用addSubview

  2. 你有dismiss...,使用removeFromSuperview

  3. 存储对您管理其视图的任何视图控制器的引用,就像我在retain/strong 属性中建议的那样。

【讨论】:

  • 我不能在这个中使用导航控制器。我必须使用呈现和解散方法。
  • 请看我的编辑。在您的情况下,我看到的唯一方法是使用您的“模态”视图手动执行 addSubview/removeFromSuperview
  • 感谢您的帮助,但现在我无法在我的应用程序中使用上述建议,因为我几乎完成了所有工作,剩下的很少并出现此错误。
  • 如果我保留父视图控制器的对象并关闭视图,有什么办法吗?我不知道如何做到这一点,但它只是出现在我的脑海中。有什么想法吗?
  • 我认为您没有任何简单的方法来使用模态视图控制器。另一方面,使用 addSubview/removeFromSuperview 应该非常简单,不需要对您的应用进行大的更改。
【解决方案2】:

您好在“C”视图控制器中使用以下代码

[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES];

【讨论】:

    猜你喜欢
    • 2012-08-10
    • 2011-09-05
    • 1970-01-01
    • 2012-02-20
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多