iosswiftloaduitabbarcontrollerlaunch

How to load all views in UITabBarController?


I have not found relevant and up to date answers in the posts related to this question.

I would like to load all viewcontrollers on launch. Currently it launches as expected but when I tap on a bar item (the first time) there is a slight delay to load it because it has not been loaded yet.

How can I do that is Swift ?

Thanks.


Solution

  • To preload a UIViewController's view, simply access its view property:

    let _ = myViewController.view
    

    To preload all view controllers on a UITabBarController, you can do:

    if let viewControllers = tabBarController.viewControllers {
        for viewController in viewControllers {
            let _ = viewController.view
        }
    }
    

    Or a bit more compactly:

    tabBarController.viewControllers?.forEach { let _ = $0.view }