问题描述
我希望我的应用在启动时有条件地检查变量是否正确。基于此,它应该转到简介屏幕(在我的情况下,他可以在其中选择一个变量,然后选择一个团队),或者应该启动主视图。搜索后,我找到了此代码并对其进行了编辑。但是似乎仍然有问题。首先,我没有两个标识符。简介有一个主视图,但没有主视图。我的主视图称为WeatherViewController,“简介”屏幕称为FirstScreenViewController。我还添加了Main.storyboard的图片。 我也用Google搜索了很多关于条件UINavigationController的信息,但是我只能通过视频来理解,但是没有找到关于它的视频。
var id = hello ? "goToIntro" : "???"
self.window = UIWindow(frame: UIScreen.main.bounds)
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
let WeatherViewController: UIViewController = mainStoryboard.FirstScreenViewController(withIdentifier: WVC has no identifier??) as UIViewController
self.window?.rootViewController = WeatherViewController
self.window?.makeKeyAndVisible()
if hello {
self.performSegue(withIdentifier: "goToIntro",sender: self)
} else {
/here nothing should happen. It should open the Main View
self.performSegue(withIdentifier: "???",sender: self)
}
解决方法
注意:此答案是指试图在loadView()
内进行搜索的原始问题(进行任何编辑之前)。
您应该在loadView
中手动创建控制器的视图。您目前无所事事,因此黑屏。此外,如果您使用情节提要(storyboard)或xib来管理此控制器,则完全不应覆盖loadView
。
说过,将分支逻辑移回“某物”(例如UINavigationController
或自定义的容器控制器,甚至直接设置您的根控制器)可能是一个更好的主意。窗口(如果有意义),它将根据某种条件显示(或设置)A或B,从而避免完全加载此控制器(请记住,在代码中,控制器已初始化,它将成为层次结构的一部分,并且所有的生命周期方法 都将被调用,即使您直接与另一个方法进行了交互)
最后,如果您出于某种原因决定覆盖loadView
,而不必自己调用viewDidLoad
,则系统将调用此方法。