使用viewDidAppear呈现视图控制器,在关闭时重新打开它

时间:2016-11-13 00:13:49

标签: ios swift xcode presentviewcontroller

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

当MainVC在viewDidAppear中加载时,我想呈现InstructionsVC。

效果很好。应用程序加载就像它应该的那样启动。当我按下说明界面上的[关闭]按钮时会出现问题。它关闭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()
}

在我的指令课程中,我在关闭按钮上有以下操作:

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

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

先谢谢好友!

1 个答案:

答案 0 :(得分:3)

每次视图控制器的内容视图变得可见时,都会调用

viewWillAppearviewDidAppear。这包括第一次渲染,以及在被模态或其他视图控制器覆盖在导航堆栈中之后再次显示它时。

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

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