Xcode 12.0 iOS 13+ UIViewController与viewWillDisappear有关的问题

问题描述

我有一个为我的朋友写的简单的闪存卡应用程序。我充其量是最爱好的。从本质上讲,Tinder可以将卡翻转成死语。在iOS 13更新之前,一切一直运转良好,Apple再次使用Storyboard来提高灵活性。

我的问题是我退出退出视图时保存用户认设置的优雅解决方案。当按下另一个屏幕上的按钮时,将调用此“ carddeck”视图控制器。要退出同一视图控制器,请先按下与“动作选择-显示”(而非@IBAction)相关的按钮,该按钮会将视图带回到“ mainview”视图控制器。我尝试使用“模态呈现”进行相同的动作搜索。但没有骰子。

class CardDeckViewController: UIViewController {

override func viewDidLoad() {
        super.viewDidLoad()
        // called!
}

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)
        // called!
}

    override func viewWilldisappear(_ animated: Bool) {
        super.viewWilldisappear(true)
        // not called when "return" on this screen is pressed; 
        // however,it still returns to the main screen it just doesn't save the user's score
}

任何帮助将不胜感激。我希望有一个比重做整个故事板更容易的修复程序。我看到有关UIModalPresentFullScreen的信息。我不是Swift专家,所以在这一点上,我认为我会向专业人士伸出援手。希望这太耗时了修复。幸运的是,我认为其他视图不受此影响。

感谢阅读!

解决方法

您可以尝试以下几项操作:

  1. 听起来您正在再次展示“主视图”视图控制器。不看代码很难说,但我认为您可能应该关闭“ CardDeck”视图控制器,以便返回到“主视图”视图控制器。

  2. 看看UIAdaptivePresentationControllerDelegatestackoverflow post涵盖了更改和iOS 13解决方案。

  3. 我在iOS 12中更改了iOS 12视图控制器生命周期行为时遇到了一些类似的问题。

如果没有其他方法,我建议考虑NotificationCenter。您是从当前的视图控制器进行广播的,因此像AppDelegate这样的人可以接收到该消息并采取相应措施。它并不总是工作的最佳工具,但在某些情况下可以提供帮助。

  1. 与您的问题无关,但您对超级super.viewWillAppear(true)的调用可能应该是super.viewWillAppear(animated),因此您不会忽略方法参数。
,

答案在这个问题的底部:

Presenting modal in iOS 13 fullscreen

我只需要将情节提要UI属性从“自动”重新定义为“全屏”。