从另一个 modalviewcontroller 关闭 modalviewcontroller

Posted

技术标签:

【中文标题】从另一个 modalviewcontroller 关闭 modalviewcontroller【英文标题】:dismiss modalviewcontroller from another modalviewcontroller 【发布时间】:2011-05-09 10:17:28 【问题描述】:

我正在展示来自另一个 modalviewcontroller 的 modalviewcontroller。当我解散第二个 modalviewcontroller 时,第一个和第二个 modalviewcontroller 都应该被解散。我试图访问第一个模态视图,如

[self.view.superview dismissmodalviewcontroller];  

但它显示错误。从第二个modalViewController 获取第一个modalViewController 的引用并从中调用dismiss 方法的正确方法是什么?

【问题讨论】:

在问了 25 个问题之后,我认为您应该学习如何在 *** 上正确格式化。如果您将问题的格式设置为更易于阅读,人们会更倾向于阅读和回答。 写问题的时候用鼠标选择整个代码部分,然后点击顶部的''按钮..这是格式化代码的方式.. 谢谢,以后会继续这样做的……顺便说一句,我仍然卡住了。有人请帮忙。 【参考方案1】:

是这样的。

A 呈现 B。这里,A 是 B 的父级(这里,A.modalViewController 将是 B,B.parentViewController 将是 A)

B代表C。这里,B是C的父级(这里,B.modalViewController是C,C.parentViewController是B)

根据苹果指南,其父控制器有责任解散其子控制器。

所以如果你想关闭控制器 C,你可以在 C.parentViewController 调用dismissModalViewController。由于 C 的父级是 B,因此 B 正在解除其呈现的模态(子)控制器。

但是你甚至想解雇B。B的父母有责任解雇B。所以你需要说[B.parentViewControllerdismissModalViewControllerAnimated:YES];

因此,您需要从 C 中获取 B 作为 C.parentViewController(不要忘记在此处进行类型转换)。那你说[B.parentViewControllerdismissModalViewControllerAnimated: YES];

【讨论】:

【参考方案2】:

试试[self.parentViewController dismissModalViewControllerAnimated:YES];

这将关闭两个模态视图控制器

【讨论】:

我试过这种方式。但这似乎不起作用。这是views.tableviewcontroller->modalviewcontroller->modalviewcontroller的层次结构【参考方案3】:

dismissModalViewControllerAnimated: 方法是 UIViewController 类的一部分,而不是 UIView 的一部分。所以你需要这样做

[self.parentViewController dismissModalViewControllerAnimated:YES];

而不是在self.view.superview 上调用它。

【讨论】:

这不起作用尝试这样做,但只有一个视图被关闭。第一个模态视图不去。还有其他方法吗? @sujith1406:所以你应该已经有了[self dismissModelViewControllerAnimated:YES];。尝试用[self.parentViewController dismissModalViewControllerAnimated:YES]; 替换它。从链接的文档中:如果您连续呈现多个模态视图控制器,从而构建一个模态视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器和上面的所有视图控制器堆栈上的那个孩子。. 很抱歉再次打扰您,当我得到您的答案时,我首先替换了 [self dismissModelViewControllerAnimated:YES];与 [self.parentViewControllerdismissModelViewControllerAnimated:YES];但在这两种情况下,只有第二个模态视图被关闭。【参考方案4】:

为了进一步澄清,您可能需要这样的东西:

[self.parentViewController.parentViewController dismissModalViewControllerAnimated:YES];

【讨论】:

【参考方案5】:

我刚刚找到了答案,可能会对某人有所帮助 我们只需要一行代码

[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];

【讨论】:

【参考方案6】:

遗憾的是,视图总是轻弹到堆栈中的第一个模态然后执行动画。

我用自定义动画修复了它:

        let transition: CATransition = CATransition()
        transition.duration = 0.5
        transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
        transition.type = kCATransitionReveal
        transition.subtype = kCATransitionFromBottom
        self.view.window!.layer.add(transition, forKey: nil)
        self.presentingViewController?.presentingViewController?.dismiss(animated: false, completion: nil)

【讨论】:

以上是关于从另一个 modalviewcontroller 关闭 modalviewcontroller的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个 modalViewController 退出后更新 modalViewController

使用多个 ModalViewController 处理对象

UIActivityindicator 不会显示在 Modalviewcontroller 上

iPhone ModalViewController 来自第一个标签栏视图

如何在 masterViewController 中呈现 modalViewController?

iPad 在应用程序启动时打开一个 modalViewController