第二次启动应用程序只显示黑色视图

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 在您的案例中开始。