【问题标题】:Storyboard's view controller not showing up when programmatically set as root view controller当以编程方式设置为根视图控制器时,Storyboard 的视图控制器未显示
【发布时间】:2019-03-25 17:16:38
【问题描述】:

我正在尝试根据应用启动时的某些条件更改 rootVC。我所有的 VC 都是在故事板中制作的,所以我这样做:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                    // Override point for customization after application launch.

                    checkPhotoLibraryAccess()

                    return true
                }

func checkPhotoLibraryAccess(){

                    if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.denied ||  PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.notDetermined {
                        showPermissionVC()
                    } else {
                        showContainerVC()
                    }
                }

func showPermissionVC (){

                    let storyboard = UIStoryboard(name: "Main", bundle: nil)

                    let rootVC = storyboard.instantiateViewController(withIdentifier: "askPermissionVC")

                    UIApplication.shared.windows.first?.rootViewController = rootVC

                    self.window?.makeKeyAndVisible()

                }

func showContainerVC (){

                    let storyboard = UIStoryboard(name: "Main", bundle: nil)

                    let rootVC = storyboard.instantiateViewController(withIdentifier: "containerVC")

                    UIApplication.shared.windows.first?.rootViewController = rootVC

                    self.window?.makeKeyAndVisible()

                }

我已经从情节提要中删除了显示初始 VC 的箭头,这样它就不会与代码发生冲突。但是,我收到了这个错误,模拟器的屏幕上什么也没显示:

[Application] 无法实例化默认视图控制器 UIMainStoryboardFile 'Main' - 也许指定的入口点是 没有设置?

我现在已经从 info.plist 中删除了“主故事板文件基本名称”属性。这次错误消失了,但仍然没有出现。我做错了什么?

【问题讨论】:

    标签: ios swift storyboard rootviewcontroller


    【解决方案1】:

    您需要以编程方式初始化窗口。

    尝试将以下内容添加到 Appdelegate 中的 didFinishLaunchingWithOptions 方法的开头

    self.window = UIWindow()
    

    同样在您的showPermissionVC 和showContainerVC 方法中,替换这一行:

    UIApplication.shared.windows.first?.rootViewController = rootVC
    

    与:

    window?.rootViewController = rootVC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多