如何加载 UITabBarController 中的所有视图?
How to load all views in UITabBarController?
我没有在与此问题相关的帖子中找到相关的和最新的答案。
我想在启动时加载所有视图控制器。目前它按预期启动,但当我(第一次)点击栏项目时,加载它会稍有延迟,因为它尚未加载。
我该怎么做Swift?
谢谢。
要预加载 UIViewController
的视图,只需访问其 view
属性:
let _ = myViewController.view
要在 UITabBarController
上预加载所有视图控制器,您可以这样做:
if let viewControllers = tabBarController.viewControllers {
for viewController in viewControllers {
let _ = viewController.view
}
}
或者更紧凑一点:
tabBarController.viewControllers?.forEach { let _ = [=12=].view }
上面罗伯特的回答对我有用,但我将 UINavigationControllers 作为每个选项卡的初始视图控制器。因此我不得不打电话给
viewControllers.forEach { [=10=].view }
在我的 UINavigationControllers 中,以便也加载它们的根视图控制器。希望对山姆有所帮助。
如果你想同时准备提交和子控制器,你还必须调用viewWillAppear(Bool)
:
tabBarController.viewControllers?.forEach {
let _ = [=10=].view
[=10=].viewWillAppear(true)
}
忽略此选项会导致视图位于导航栏和标签栏下方。
结合 Robert 和 M. 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 中,应该可以解决问题...
我没有在与此问题相关的帖子中找到相关的和最新的答案。
我想在启动时加载所有视图控制器。目前它按预期启动,但当我(第一次)点击栏项目时,加载它会稍有延迟,因为它尚未加载。
我该怎么做Swift?
谢谢。
要预加载 UIViewController
的视图,只需访问其 view
属性:
let _ = myViewController.view
要在 UITabBarController
上预加载所有视图控制器,您可以这样做:
if let viewControllers = tabBarController.viewControllers {
for viewController in viewControllers {
let _ = viewController.view
}
}
或者更紧凑一点:
tabBarController.viewControllers?.forEach { let _ = [=12=].view }
上面罗伯特的回答对我有用,但我将 UINavigationControllers 作为每个选项卡的初始视图控制器。因此我不得不打电话给
viewControllers.forEach { [=10=].view }
在我的 UINavigationControllers 中,以便也加载它们的根视图控制器。希望对山姆有所帮助。
如果你想同时准备提交和子控制器,你还必须调用viewWillAppear(Bool)
:
tabBarController.viewControllers?.forEach {
let _ = [=10=].view
[=10=].viewWillAppear(true)
}
忽略此选项会导致视图位于导航栏和标签栏下方。
结合 Robert 和 M. 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 中,应该可以解决问题...