以编程方式设置 rootViewController 不起作用,仅在 Xcode 11 中从故事板中选择初始视图控制器 [英] Set rootViewController programmatically not working, picking initial view controller from storyboard only in Xcode 11

查看:38
本文介绍了以编程方式设置 rootViewController 不起作用,仅在 Xcode 11 中从故事板中选择初始视图控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试以编程方式更改根视图控制器,最初在故事板中检查初始视图控制器.每次打开相同的 viewController 时,它都会在故事板中设置为 initialViewController.请指导.在下面分享到目前为止尝试过的代码:

Trying to change the root view controller programmatically, initially in storyboard as initial view controller is checked. Every time same viewController is opened which is set up as initialViewController in storyboard. Please guide. Sharing below what code tried so far:

let isLoggedIn = UserDefaults.standard.bool(forKey: kIsLoggedIn)
        if isLoggedIn{
            //Welcome Screen for Touch ID
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
           // let rootVC = storyboard.instantiateViewController(withIdentifier: "WelcomeViewController") as! WelcomeViewController
            let rootVC = storyboard.instantiateViewController(withIdentifier: "DashboardVC") as! DashboardVC
            setRoot(rootVC: rootVC)
        }
        else{
            //Login Screen
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let rootVC = storyboard.instantiateViewController(withIdentifier: "RegisterViewController") as! RegisterViewController
            setRoot(rootVC: rootVC)
        }

func setRoot(rootVC: UIViewController){
    let navController = UINavigationController.init(rootViewController: rootVC)
    navController.isNavigationBarHidden = true
    //if let window = self.window{
        window?.rootViewController = rootVC
        window?.makeKeyAndVisible()
    //}
}

其次,尝试更改 rootViewController 并尝试在登录后添加 MFSideMenu 但无法快速工作.请在下面找到它的代码:

Secondly, trying to change the rootViewController and trying to add MFSideMenu after login but not working swift. Please find it's code below:

 func loadDashBoard(storyboard : UIStoryboard){
    let vc = storyboard.instantiateViewController(withIdentifier: "MenuNavigationController")
    let sideMenuVC = storyboard.instantiateViewController(withIdentifier: "SideMenuViewController") as! SideMenuViewController
    let container : MFSideMenuContainerViewController = MFSideMenuContainerViewController.container(withCenter: vc, leftMenuViewController: sideMenuVC, rightMenuViewController: nil)
    let navController = UINavigationController.init(rootViewController: container)
    navController.isNavigationBarHidden = true

        window?.rootViewController = navController
        window?.makeKeyAndVisible()
    }

以上所有写在 AppDelegate 中的代码.

All the above written code in AppDelegate.

推荐答案

通过多做一些谷歌得到了答案,我的意思是 stackoverflow.

Got the answer by doing some more google, i mean stackoverflow.

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?
let storyboard = UIStoryboard(name: "Main", bundle: nil)

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
  guard let windowScene = scene as? UIWindowScene else { return }
  let vc = storyboard.instantiateViewController (withIdentifier: "Primary") as! ViewController
  window = UIWindow(windowScene: windowScene)
  window?.rootViewController = vc
  window?.makeKeyAndVisible()
}

SceneDelegate 用于此目的,因为 iOS 13 而不是 AppDelegate.这是链接 SceneDelegate 示例

SceneDelegate is used for this purpose since iOS 13 not AppDelegate. Here is the link SceneDelegate example

这篇关于以编程方式设置 rootViewController 不起作用,仅在 Xcode 11 中从故事板中选择初始视图控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆