ios - 在当前上下文中以模态方式呈现时,在展开时,不会调用 viewDidAppear

标签 ios swift transparency unwind-segue viewdidappear

我正在开发的应用程序有问题。

  • XCode 版本:9.2 (9C40b)
  • 编程语言:Swift 4
  • 应用的目标 iOS 版本:11.2

场景:我有一个 mainVC (ViewController),它调用模态呈现的 secondaryVC。在 secondaryVC 中进行选择后,我按下 UIButton 通过展开转场返回到 mainVC。

在 secondaryVC 中,transition 配置为“Cross Disolve”,Presentation 配置为“Over Current Context”,以将前一个 View 视为背景(背景配置为 50% 不透明度):

enter image description here

症状:在这种情况下,当通过展开转场返回时,viewDidAppear 永远不会被调用。我需要调用它来执行进一步的检查功能。如果我将演示文稿设置为“全屏”而不是“当前上下文”,则会调用它,但在这种情况下,我无法将之前的 View 视为背景。

问题:我怎样才能让 viewDidApper 被调用,从而在主 VC 上保持 secondaryVC 的透明度?

PS:很抱歉,如果我在写这个问题时遗漏了什么;这是我的第一次。我搜索过这个论坛和其他论坛,但没有找到解决方案(或者我还没有找到)。

最佳答案

viewDidAppear 没有被调用的原因是第一个 View Controller 永远不会消失。如果您使用“Over Current Context”,那么您仍然可以在 View Controller 二后面看到 View Controller 一(假设有透明部分)。所以 View Controller 一保持可见,永远不会消失,因此当 View Controller 二显示时,既不会调用 viewWillDisappear 也不会调用 viewDidDisappear。然后,当您放松时,第二个 View Controller 消失但拳头没有出现,因此不会调用 viewWillAppear 和 viewDidAppear。

如果您使用“全屏”,那么第一个 View Controller 会消失,因此所有功能都会触发。

如果您需要在第二个 View Controller 消失并返回到第一个 View Controller 时执行某些操作,您可以将它放在 unwind 函数中。

编辑

这是执行一些代码的技巧,例如从展开的转场显示警报 View Controller :

    DispatchQueue.main.async {
        let ac = UIAlertController(title: "Title", message: "Message", preferredStyle: .alert)
        ac.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
        self.present(ac, animated: true, completion: nil)
    }

基本上所做的是将所需的代码推回主线程,它发生在展开转场完成并且您回到第一个 View Controller 中之后。

关于ios - 在当前上下文中以模态方式呈现时,在展开时,不会调用 viewDidAppear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48043124/

相关文章:

ios - 如何在 ios 7 中更改 UILocalizedIndexedCollat​​ion 的背景颜色

swift - iOS 15 中标签栏顶部的细线未删除

java - 透明面板上透明图像的旋转

json - swift UITableView : How to Load data from JSON

SwiftUI 组合 : Nested Observed-Objects

java - BasicButtonUI 按钮不会重绘

css - 使 div 透明但保持边框可见

ios - 如何让 NSURLSession 从服务器返回 Content-Length(http header )。 Objective-C、iOS

ios - 访问 '<>' 符号内的值

ios - 如何将父 View Controller 设置为对象,以便我可以调用它的方法之一?