Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用程序的第二次启动仅显示黑色视图_Ios_Swift_Viewcontroller_Xcode11 - Fatal编程技术网

Ios 应用程序的第二次启动仅显示黑色视图

Ios 应用程序的第二次启动仅显示黑色视图,ios,swift,viewcontroller,xcode11,Ios,Swift,Viewcontroller,Xcode11,在应用程序第一次启动时,我希望用户从ViewController1(VC1)开始,在完成安装过程后,在ViewController3(VC3)中单击一个按钮,选项卡栏控制器的第一项应该是新的初始视图控制器 第一次启动有效,但当关闭应用程序并重新打开应用程序时,所有内容都变黑 当我将VC3设置为新的初始viewController时,一切正常 我的领馆 var window: UIWindow? func scene(_ scene: UIScene, willConnectTo se

在应用程序第一次启动时,我希望用户从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显示,但结果与黑屏相同


您不应该尝试更改窗口,而应该更改.rootViewController

VC1是storyboard中的入口点,这意味着您的应用程序每次启动时都会使用初始视图控制器,在app delegate中的“didFinishLaunchingWithOptions”过程中,您可以询问用户是否已通过Onboard升级,在这种情况下,请按如下方式切换rootViewController:

func showMainStoryboard() {
   let homeViewController = UIStoryboard(name: "StoryboardName", bundle: Bundle.main).instantiateInitialViewController()
   window?.rootViewController = homeViewController
}
为了使下面的示例适用于您,您必须创建一个单独的故事板:1个用于Onboard,1个用于main

流程#1: 用户第一次安装应用程序时,在他单击VC3上的按钮后,他会在该事件上切换rootViewController

流程#2:
在用户单击按钮并重新输入应用程序后,他将不会随入职而升级,但会被路由到“主”VC,这在您的情况下是一个开始。

您不应该尝试更改窗口,而应该更改.rootViewController

VC1是storyboard中的入口点,这意味着您的应用程序每次启动时都会使用初始视图控制器,在app delegate中的“didFinishLaunchingWithOptions”过程中,您可以询问用户是否已通过Onboard升级,在这种情况下,请按如下方式切换rootViewController:

func showMainStoryboard() {
   let homeViewController = UIStoryboard(name: "StoryboardName", bundle: Bundle.main).instantiateInitialViewController()
   window?.rootViewController = homeViewController
}
为了使下面的示例适用于您,您必须创建一个单独的故事板:1个用于Onboard,1个用于main

流程#1: 用户第一次安装应用程序时,在他单击VC3上的按钮后,他会在该事件上切换rootViewController

流程#2:
在用户点击按钮并重新输入应用程序后,他将不会在入职时得到提升,但会被转到“主要”VC,这对你来说是一个开始。

非常感谢这真的帮助我走出了我为自己挖的洞。我重新启动了两个故事板,但执行了if userdefaults==“home”{your showmestoryboard}else{display onboarding process}这在SceneDelegate中起了作用。@EriDr如果这对你有效,你应该将其标记为答案对不起,我想是这样的。非常感谢这真的帮助我走出了为自己挖的洞。我用两个故事板重新启动,但执行if userdefaults==“home”{your showmestoryboard}else{display onboarding process}这在SceneDelegate中是有效的。@EriDr如果这对您有效,您应该将其标记为答案抱歉,我想我这样做了。