在模拟当前上下文时,在展开时,viewDidAppear不会被调用

时间:2017-12-31 14:07:03

标签: ios swift transparency unwind-segue viewdidappear

我遇到了一个我正在开发的应用程序的问题。

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

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

在secondaryVC中,转换配置为" Cross Disolve"和演示,作为"过度背景"将上一个视图视为背景(背景配置为50%不透明度):

enter image description here

症状:在这种情况下,当通过展开segue返回时,viewDidAppear永远不会被调用。我需要调用它来执行进一步的检查功能。它被调用,如果不是" Over Current Context",我将演示设置为"全屏"但在这种情况下,我无法将之前的观点视为背景。

问题:如何通过mainVC调用viewDidApper来保持secondaryVC的透明度?

PS:对不起,如果我在写这个问题时遗漏了任何内容;这是我的第一次。我已经搜索了这个和其他论坛,但我还没有找到解决方案(或者我还没有找到它)。

1 个答案:

答案 0 :(得分:4)

未调用viewDidAppear的原因是因为第一个视图控制器永远不会消失。如果您使用'Over Current Context',那么您仍然可以在视图控制器2后面看到视图控制器1(假设您有透明的部分)。因此视图控制器1保持可见,永远不会消失,因此当显示视图控制器2时,既不会调用viewWillDisappear,也不会调用viewDidDisappear。然后当你展开后,第二个视图控制器消失但拳头没有出现,因此不会调用viewWillAppear和viewDidAppear。

如果使用“全屏”,则第一个视图控制器会消失,因此所有功能都会触发。

如果你需要在第二个视图控制器消失后再做一些事情,然后你回到第一个视图控制器,你可以把它放在展开功能中。

修改

这是执行某些代码的技巧,例如从展开segue显示警报视图控制器:

    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)
    }

基本上所做的就是将所需的代码推回到主线程上,并且它在unwind segue完成后又回到了第一个视图控制器中。