第二次启动应用程序只显示黑色视图
Second start of application only display a black view
在应用程序的 firstStart 上,我希望用户从 ViewController1 (VC1) 开始,并在完成入职流程后点击 ViewController3 (VC3) 中的按钮,如果选项卡栏控制器的第一项是新的初始项视图控制器。
第一次启动正常,但关闭应用程序并重新打开应用程序时,一切都变黑了。
当我将 VC3 设置为新的初始 viewController 一切正常。
我的场景代理
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
//self.window = UIWindow(frame: UIScreen.main.bounds)
// Is it the apps first start?
let firstView = UserDefaults.standard.string(forKey: "firstStart")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// Create the root view controller as needed
guard let vc = storyboard.instantiateViewController(identifier: firstView ?? "Welcome") as? ViewController else {
print("ViewController not found")
return
}
let nc = UINavigationController(rootViewController: vc)
// Create the window.
let win = UIWindow(windowScene: windowScene)
win.rootViewController = nc
win.makeKeyAndVisible()
window = win
}
我的按钮:
@IBAction func buttonActivate(_ sender: Any) {
// Change start View to "Home"
UserDefaults.standard.set("Home", forKey: "firstStart")
}
我尝试更改 Info.plist 中的键并通读 UIApplicationSceneManifest 但没有成功。尝试使用额外的导航控制器作为选项卡栏控制器项目 2 显示,但结果相同但黑屏。
您不应该尝试更改 window,而是更改 .rootViewController。
VC1是故事板的入口点,这意味着你的应用程序每次启动的初始视图控制器,在app-delegate的"didFinishLaunchingWithOptions"期间你可以询问用户是否已经通过入职提升,在这种情况下按如下方式切换 rootViewController:
func showMainStoryboard() {
let homeViewController = UIStoryboard(name: "StoryboardName", bundle: Bundle.main).instantiateInitialViewController()
window?.rootViewController = homeViewController
}
为了使以下示例对您有用,您必须创建一个单独的故事板:1 个用于入职,1 个用于主要。
流程 #1:
用户第一次安装该应用程序时,在他单击 VC3 上的按钮后,他会通过入职 VC 获得提升,您会在该事件上切换 rootViewController。
流程#2:
在用户单击按钮并重新进入应用程序后,他不会通过入职提升,而是路由到 "main" VC、a.k.a 在您的案例中开始。
在应用程序的 firstStart 上,我希望用户从 ViewController1 (VC1) 开始,并在完成入职流程后点击 ViewController3 (VC3) 中的按钮,如果选项卡栏控制器的第一项是新的初始项视图控制器。
第一次启动正常,但关闭应用程序并重新打开应用程序时,一切都变黑了。
当我将 VC3 设置为新的初始 viewController 一切正常。
我的场景代理
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
self.window = UIWindow(windowScene: windowScene)
//self.window = UIWindow(frame: UIScreen.main.bounds)
// Is it the apps first start?
let firstView = UserDefaults.standard.string(forKey: "firstStart")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
// Create the root view controller as needed
guard let vc = storyboard.instantiateViewController(identifier: firstView ?? "Welcome") as? ViewController else {
print("ViewController not found")
return
}
let nc = UINavigationController(rootViewController: vc)
// Create the window.
let win = UIWindow(windowScene: windowScene)
win.rootViewController = nc
win.makeKeyAndVisible()
window = win
}
我的按钮:
@IBAction func buttonActivate(_ sender: Any) {
// Change start View to "Home"
UserDefaults.standard.set("Home", forKey: "firstStart")
}
我尝试更改 Info.plist 中的键并通读 UIApplicationSceneManifest 但没有成功。尝试使用额外的导航控制器作为选项卡栏控制器项目 2 显示,但结果相同但黑屏。
您不应该尝试更改 window,而是更改 .rootViewController。
VC1是故事板的入口点,这意味着你的应用程序每次启动的初始视图控制器,在app-delegate的"didFinishLaunchingWithOptions"期间你可以询问用户是否已经通过入职提升,在这种情况下按如下方式切换 rootViewController:
func showMainStoryboard() {
let homeViewController = UIStoryboard(name: "StoryboardName", bundle: Bundle.main).instantiateInitialViewController()
window?.rootViewController = homeViewController
}
为了使以下示例对您有用,您必须创建一个单独的故事板:1 个用于入职,1 个用于主要。
流程 #1: 用户第一次安装该应用程序时,在他单击 VC3 上的按钮后,他会通过入职 VC 获得提升,您会在该事件上切换 rootViewController。
流程#2: 在用户单击按钮并重新进入应用程序后,他不会通过入职提升,而是路由到 "main" VC、a.k.a 在您的案例中开始。