我在与此问题相关的帖子中找不到相关和最新的答案。
我想在启动时加载所有viewcontrollers。目前按预期启动,但是当我点击一个条形项目(第一次)时,加载它会有一点延迟,因为它尚未加载。
我怎么能这样做是Swift?
感谢。
答案 0 :(得分:16)
要预加载UIViewController
的视图,只需访问其view
属性:
let _ = myViewController.view
要预加载UITabBarController
上的所有视图控制器,您可以执行以下操作:
if let viewControllers = tabBarController.viewControllers {
for viewController in viewControllers {
let _ = viewController.view
}
}
或者更紧凑:
tabBarController.viewControllers?.forEach { let _ = $0.view }
答案 1 :(得分:4)
结合Robert和Daigle的解决方案,我想到了这样的东西:
for viewController in tabBarController?.viewControllers ?? [] {
if let navigationVC = viewController as? UINavigationController, let rootVC = navigationVC.viewControllers.first {
let _ = rootVC.view
} else {
let _ = viewController.view
}
}
将其添加到您的第一个ViewController的ViewDidLoad中,应该可以解决问题...
答案 2 :(得分:3)
viewControllers.forEach { $0.view }
在我的UINavigationControllers中,以便也可以加载它们的根视图控制器。希望能帮助Sam出局。
答案 3 :(得分:0)
如果您要准备提交和子控制器,还必须致电viewWillAppear(Bool)
:
tabBarController.viewControllers?.forEach {
let _ = $0.view
$0.viewWillAppear(true)
}
忽略此原因,视图将位于导航栏和标签栏下方。