首页 > 解决方案 > 有没有办法在 func viewDidLoad() 上使用 Swift 导航到另一个页面?

问题描述

打开我的应用程序后,我希望能够检查 UserDefaults.standard 是否具有两个不同变量的值。如果这些变量为空,则该类的其余部分将继续,但如果这两个变量有值,我想导航到另一个页面。是否可以通过 viewDidLoad() 做到这一点?我正在考虑使用 viewDidLoad() 因为我希望在用户最终查看之前发生页面更改。

这是我到目前为止所拥有的

    override func viewDidLoad() {
        super.viewDidLoad()

        let preferences = UserDefaults.standard

        if preferences.string(forKey: "useremail") != "" || preferences.string(forKey: "usernumber") != "" {
            transitionToMain()
        }
    }
    func transitionToMain() {

        let mainPage =
        storyboard?.instantiateViewController(withIdentifier: Constants.Storyboard.mainPage) as? MainPage

        view.window?.rootViewController = mainPage
        view.window?.makeKeyAndVisible()
    }

但是,当我尝试运行它时,页面保持不变并且不会改变。我为 transitionToMain 拥有的代码是我在单击按钮时拥有的代码,它在这些情况下有效,但不适用于此。有没有更好的方法来解决这个问题?有什么可以改进的,这样它才能正常工作?

非常感谢您提前。

标签: iosswiftxcode

解决方案


如果您想在 viewDidLoad 函数中调用它,那么您必须使用来自 appDelgate 的窗口引用,因为 windows 为 nil,因为尚未添加到窗口中,

func transitionToMain() {

    let mainPage =
    storyboard?.instantiateViewController(withIdentifier: Constants.Storyboard.mainPage) as? MainPage
    let appDelgate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.window?.rootViewController = mainPage
    appDelegate.window?.makeKeyAndVisible()
}

推荐阅读