我正在尝试在 SceneDelegate 中设置我的入门屏幕。
当我运行下面的代码时,它可以编译,但只是进入黑屏。
其中有很多针对 AppDelegate 的精彩入门教程,但针对 iOS13 的新 SceneDelegate 的入门教程却很少。我学习了本教程并尝试将其应用到 SceneDelegate,但我无法让它工作:
这是我的场景委托代码。
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
let launchedBefore = UserDefaults.standard.bool(forKey: "hasLaunched")
self.window = UIWindow(frame: UIScreen.main.bounds)
let launchStoryboard = UIStoryboard(name: "Onboarding", bundle: nil)
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
var vc: UIViewController
if launchedBefore
{
vc = mainStoryboard.instantiateInitialViewController()!
}
else
{
vc = launchStoryboard.instantiateViewController(identifier: "Onboarding")
}
UserDefaults.standard.set(true, forKey: "hasLaunched")
self.window?.rootViewController = vc
self.window?.makeKeyAndVisible()
// guard let _ = (scene as? UIWindowScene) else { return }
}
我已经尝试过注释掉最后一个警卫声明和不注释掉它。
您创建的窗口不正确,因此最终会出现黑屏。让故事板为您创建窗口会好得多,因为您不知道该怎么做。只需完全删除这一行:
self.window = UIWindow(frame: UIScreen.main.bounds)
您也可以剪掉这一行,因为它也很多余(故事板也会为您执行此操作):
self.window?.makeKeyAndVisible()
您现在唯一的责任是设置self.window?.rootViewController
。请注意,您不需要说
vc = mainStoryboard.instantiateInitialViewController()!
因为那已经是根视图控制器了,由情节提要提供给您。因此唯一的事情you在您提出的架构中,需要做的是在用户需要加入的情况下替换根视图控制器。
(See 我的 github 仓库 https://github.com/mattneub/RegistrationExample/blob/master/RegistrationExample/AppDelegate.swift一个工作示例。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)