使用 viewDidAppear 呈现一个 View Controller,当它关闭时重新打开它

Using viewDidAppear to present a View Controller, re-opening it when it's closed

在我的应用程序中,我创建了一个新的故事板,作为有关如何使用某些功能的非常基本的教程。 (Instructions.storyboard)。这个故事板有它自己的 class - InstructionsVC.swift

我想在 viewDidAppear 中加载 MainVC 时显示说明VC。

效果很好。就像它应该的那样在应用程序加载时启动。当我在指令界面按下[关闭]按钮时出现问题。它关闭 VC,淡出到主屏幕,然后立即启动指令 VC。

如何防止指令 VC 在关闭后重新加载?

func openInstructions() {
    let storyboard = UIStoryboard(name: "Instructions", bundle: nil)
    let instructionsView = storyboard.instantiateViewController(withIdentifier: "instructionsStoryboardID")
    instructionsView.modalPresentationStyle = .fullScreen
    instructionsView.modalTransitionStyle = .crossDissolve
    self.present(instructionsView, animated: true, completion:nil)
}

override func viewDidAppear(_ animated: Bool) {
    openInstructions()
}

根据我的指示 class,我在关闭按钮上执行了以下操作:

@IBAction func closeButtonPressed(_ sender: UIButton) {
    let presentingViewController: UIViewController! = self.presentingViewController
    presentingViewController.dismiss(animated: true, completion: nil)
}

注意 - 我宁愿不使用 UserDefaults 来解决这个问题,因为我将在应用程序的其他部分合并类似的东西并且不想求助于 UserDefaults 来实现理想的行为。

先谢谢小伙伴们了!

viewWillAppearviewDidAppear 每次视图控制器的内容视图变得可见时都会被调用。这包括它第一次被渲染以及在被模态覆盖或被另一个视图控制器覆盖后再次显示在导航堆栈中被推到它上面的时间。

viewDidLoad 仅在加载视图控制器的内容视图时调用一次,但在显示之前调用。因此,当调用 viewDidLoad 时,调用第二个视图控制器可能为时过早。

您可能希望将实例变量 hasBeenDisplayed 添加到您的视图控制器。在 viewDidAppear 中,勾选 hasBeenDisplayed。如果它是 false,显示你的第二个视图控制器并将 hasBeenDisplayed 设置为 true。