ios - 有没有办法在 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 拥有的代码是我在单击按钮时拥有的代码,它在这些情况下有效,但不适用于此。有没有更好的方法来解决这个问题?有什么可以改进的,这样它才能正常工作?
非常感谢您提前。
解决方案
如果您想在 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()
}
推荐阅读
- python - 在python中创建基于输入执行SQL代码的小程序
- solr - 使用组分面时出现内存不足错误
- .net - 从 .net core 2.1 引用一个 .net framework 4.5 服务
- asp.net-core - 实体框架虚拟 ICollections
- python - 如何检查是否存在多个文件夹并将其删除?
- java - 用大写小写和数字对字符串进行排序
- java - 使用 Apache POI 将 Excel/Word 转换为 PDF
- javascript - 用于 android 的 React-native 阴影道具
- html - Font Awesome 5 - SVG/JS 伪类问题
- javascript - jQuery 不能在 Firefox 上运行,但可以在 Chrome 上运行