如何在UITabBarController中加载所有视图?

时间:2015-10-21 14:16:59

标签: ios swift load uitabbarcontroller launch

我在与此问题相关的帖子中找不到相关和最新的答案。

我想在启动时加载所有viewcontrollers。目前按预期启动,但是当我点击一个条形项目(第一次)时,加载它会有一点延迟,因为它尚未加载。

我怎么能这样做是Swift?

感谢。

4 个答案:

答案 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)

罗伯特的上述答案对我有用,但我将UINavigationControllers作为每个标签的初始视图控制器。所以我不得不打电话给

viewControllers.forEach { $0.view }
在我的UINavigationControllers中

,以便也可以加载它们的根视图控制器。希望能帮助Sam出局。

答案 3 :(得分:0)

如果您要准备提交和子控制器,还必须致电viewWillAppear(Bool)

tabBarController.viewControllers?.forEach {
    let _ = $0.view
    $0.viewWillAppear(true)
}

忽略此原因,视图将位于导航栏和标签栏下方。