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

问题描述:

在我的应用程序中,我创建了一个新的故事板,作为如何使用某些功能的非常基本的教程。 (Instructions.storyboard)。这个故事板有它自己的类 - InstructionsVC.swift使用viewDidAppear来呈现视图控制器,当它关闭时重新打开它

我想在MainVC在viewDidAppear内加载时呈现InstructionsVC。

它很好用。启动应用程序加载就像它应该。当我按指令界面上的[关闭]按钮时会发生问题。它关闭VC,淡入主屏幕,然后立即启动Instructions 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来达到理想的行为。

在此先感谢您的好友!

viewWillAppearviewDidAppear在每次视图控制器的内容视图变得可见时被调用。这包括第一次渲染时以及在被模式或其他视图控制器覆盖之后再次显示在导航堆栈中的时间。

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

您可能想要将实例变量hasBeenDisplayed添加到您的视图控制器。在viewDidAppear,检查hasBeenDisplayed。如果它是错误的,则显示您的第二个视图控制器并将hasBeenDisplayed设置为true。

+0

谢谢!该解决方案工作完美。 – Joe