如何加载 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 中,应该可以解决问题...