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

问题描述 投票:6回答:1

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

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

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

在辅助中,转换配置为“交叉溶解”和演示,作为“当前上下文”以将上一个视图视为背景(背景配置为50%不透明度):

enter image description here

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

问题:如何通过mainVC调用viewDidAppear来保持辅助节点的透明度?

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

ios swift transparency unwind-segue viewdidappear
1个回答
4
投票

未调用viewDidAppear的原因是因为第一个视图控制器永远不会消失。如果你使用'Over Current Context',你仍然可以在视图控制器2后面看到一个视图控制器(假设你有透明的部分)。因此视图控制器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完成后又回到了第一个视图控制器中。

© www.soinside.com 2019 - 2024. All rights reserved.