在AppDelegate中更改根视图控制器时出现黑屏
问题描述:
我试图从应用程序代理的didFinishLaunchingWithOptions
更改根视图控制器,具体取决于用户是否登录。一旦我得到过去的这个条件,我使用下面的代码更改根视图控制器:在AppDelegate中更改根视图控制器时出现黑屏
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController
self.window?.makeKeyAndVisible()
然而,当我启动应用程序(在用户的有效记录的)模拟器首先显示登录屏幕(旧的根视图控制器)一秒钟,然后屏幕变黑约30秒到一分钟,然后才显示出所需的视图控制器。
在故事板视图控制器结构如下:
SWRevealViewController - >导航控制器 - >期望的视图控制器(新的根)
其原因开始与SWRevealViewController
是因为滑动菜单被否则会损失的。
任何想法可能会发生什么?
答
下面是一个例子,它适用于我,只是使您的loginViewControllers
成为UINavigationController
的堆栈,与SWRevealController
无关。这很容易解决。
self.window = UIWindow(frame: UIScreen.main.bounds)
if User.shared.firstLaunch {
let navigationVC = Storyboard.inital.instantiateViewController(withIdentifier: "firstLaunchNC") as! UINavigationController
self.window?.rootViewController = navigationVC
} else if User.shared.token == "" {
let navigationVC = Storyboard.inital.instantiateViewController(withIdentifier: "initialVC") as! UINavigationController
self.window?.rootViewController = navigationVC
} else {
self.registerForPushNotifications(application: UIApplication.shared)
User.shared.refreshToken()
let revealController = Storyboard.main.instantiateViewController(withIdentifier: "revealViewController") as! SWRevealViewController
self.window?.rootViewController = revealController
}
self.window?.makeKeyAndVisible()
return true
答
我找到了一种方法来产生与我想要的结果类似的结果。它包括不改变根视图控制器所有,并让它升空后提出了一个“人造根视图控制器”:
if let currentRoot = self.window?.rootViewController {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let artificialRoot = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
currentRoot.present(artificialRoot, animated: false, completion: nil)
}
虽然并不理想,这种实现的结果远远比实施更好问题描述。
你可以在创建窗口键之前设置'rootViewController' *吗? – NRitH
@NRitH结果完全一样。 – rodrigochousal
你能展示一些更多的代码吗?看看你如何设置loginViewController以及触发你显示的代码会很有用。 –