在当前上下文中以模态方式呈现时,在展开时,不会调用 viewDidAppear
When presenting modally over current context, on unwind, viewDidAppear is not getting called
我正在开发的应用程序有问题。
- XCode 版本:9.2 (9C40b)
- 编程语言:Swift4
- 应用程序的目标 iOS 版本:11.2
场景:我有一个 mainVC (ViewController),它调用模态呈现的 secondaryVC。在 secondaryVC 中进行选择后,我按下 UIButton 通过展开转场返回到 mainVC。
在 secondaryVC 中,transition 配置为 "Cross Disolve",Presentation 配置为 "Over Current Context" 以将前一个视图视为背景(背景配置为 50% 不透明度):
症状:在这种情况下,当通过展开 segue 返回时,viewDidAppear 永远不会被调用。我需要调用它来执行进一步的检查功能。如果我将演示文稿设置为 "Full Screen" 而不是 "Over Current Context",则会调用它,但在那种情况下,我无法将前一个视图视为背景。
问题:如何让调用 viewDidApper 时在主 VC 上保持 secondaryVC 的透明度?
PS: 很抱歉,如果我在写这个问题时遗漏了什么;这是我的第一次。我已经搜索过这个论坛和其他论坛,但没有找到解决方案(或者我还没有确定)。
viewDidAppear 没有被调用的原因是第一个视图控制器永远不会消失。如果您使用 'Over Current Context' 那么您仍然可以在视图控制器二后面看到视图控制器一(假设有透明部分)。所以视图控制器一保持可见,永远不会消失,因此当视图控制器二显示时,既不会调用 viewWillDisappear 也不会调用 viewDidDisappear。然后当你放松时,第二个视图控制器消失但拳头没有出现所以 viewWillAppear 和 viewDidAppear 没有被调用。
如果您使用 'Full Screen',那么第一个视图控制器会消失,因此所有函数都会触发。
如果您需要在第二个视图控制器消失并返回到第一个视图控制器时执行某些操作,您可以将它放在展开函数中。
编辑
这是一个技巧,可以执行一些代码,例如从 unwind 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)
}
基本上所做的是将所需的代码推回主线程,它发生在展开转场完成并且您回到第一个视图控制器中之后。
我正在开发的应用程序有问题。
- XCode 版本:9.2 (9C40b)
- 编程语言:Swift4
- 应用程序的目标 iOS 版本:11.2
场景:我有一个 mainVC (ViewController),它调用模态呈现的 secondaryVC。在 secondaryVC 中进行选择后,我按下 UIButton 通过展开转场返回到 mainVC。
在 secondaryVC 中,transition 配置为 "Cross Disolve",Presentation 配置为 "Over Current Context" 以将前一个视图视为背景(背景配置为 50% 不透明度):
症状:在这种情况下,当通过展开 segue 返回时,viewDidAppear 永远不会被调用。我需要调用它来执行进一步的检查功能。如果我将演示文稿设置为 "Full Screen" 而不是 "Over Current Context",则会调用它,但在那种情况下,我无法将前一个视图视为背景。
问题:如何让调用 viewDidApper 时在主 VC 上保持 secondaryVC 的透明度?
PS: 很抱歉,如果我在写这个问题时遗漏了什么;这是我的第一次。我已经搜索过这个论坛和其他论坛,但没有找到解决方案(或者我还没有确定)。
viewDidAppear 没有被调用的原因是第一个视图控制器永远不会消失。如果您使用 'Over Current Context' 那么您仍然可以在视图控制器二后面看到视图控制器一(假设有透明部分)。所以视图控制器一保持可见,永远不会消失,因此当视图控制器二显示时,既不会调用 viewWillDisappear 也不会调用 viewDidDisappear。然后当你放松时,第二个视图控制器消失但拳头没有出现所以 viewWillAppear 和 viewDidAppear 没有被调用。
如果您使用 'Full Screen',那么第一个视图控制器会消失,因此所有函数都会触发。
如果您需要在第二个视图控制器消失并返回到第一个视图控制器时执行某些操作,您可以将它放在展开函数中。
编辑
这是一个技巧,可以执行一些代码,例如从 unwind 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)
}
基本上所做的是将所需的代码推回主线程,它发生在展开转场完成并且您回到第一个视图控制器中之后。