Laurent May
Laurent May

Reputation: 265

Load All TabBar Views

I have a tabbar controller as the root view controller. I would like to pre-load the views of tab [1,2,3] (tab 0 loads as the first tab automatically).

I essentially would like the code in viewdidload to run before the user taps on the tab.

Thanks

Upvotes: 26

Views: 12541

Answers (8)

user15787860
user15787860

Reputation:

Swift 5:

viewControllers?.forEach {
  if let navController = $0 as? UINavigationController {
     let _ = navController.topViewController?.view
  } else {
      let _ = $0.view.description
    }
 }

Upvotes: 0

ElegyD
ElegyD

Reputation: 4775

Swift 3:

In viewDidLoad() of your UITabBarController

for viewController in self.viewControllers! {
    _ = viewController.view
}

Upvotes: 0

Joel Kravets
Joel Kravets

Reputation: 2471

If you take your view initialization code and move it into loadView instead of viewDidLoad you can force each of the UIViewControllers that are part of your UITabBarController to be loaded by simply calling viewController.view. This happens because a UIViewController will create the view object via the loadView function when asked for it.

for(UIViewController * viewController in  tabBarController.viewControllers){
   viewController.view;
}

or more simply

[tabBarController.viewControllers makeObjectsPerformSelector:@selector(view)];

Upvotes: 33

CocoaNuts
CocoaNuts

Reputation: 189

If your all view controllers under the tab bar controller have a navigation bar embedded in them:

Swift 3

for navViewController in self.viewControllers! {
    _ = navViewController.childViewControllers[0].view
}

User Panda's solution didn't work for me.

Upvotes: 3

guozqzzu
guozqzzu

Reputation: 899

In iOS 8, I created a subclass of UITabViewController named TSMainBarViewController. In the function viewDidLoad of TSMainBarViewController, I just added this code:

for(UINavigationController * viewController in self.viewControllers){
    [[viewController.viewControllers firstObject] view];
}

Then all the viewControllers (root viewController of UINavigationController) will load . All my viewControllers are created in the StoryBoard. Do not implement the function loadView in the UIViewController.


Swift 3 code from EligyD:

for viewController in self.viewControllers! {
    _ = viewController.view
}

Upvotes: 16

Sahil Kapoor
Sahil Kapoor

Reputation: 11773

To handle tab controllers which might or might not have navigation controllers:

viewControllers?.forEach {
    if let navController = $0 as? UINavigationController {
        navController.topViewController?.view
    } else {
        $0.view.description
    }
}

Upvotes: 10

Amr Mohamed
Amr Mohamed

Reputation: 2380

if you have UINavigationController before your views

for viewController in self.tabBarController!.viewControllers! {
    var aView = viewController.topViewController as UIViewController
    aView.view.description
}

Upvotes: 1

TWilly
TWilly

Reputation: 4933

Swift equivalent...

for viewController in self.tabBarController.viewControllers!
{
    viewController.view;
}

Upvotes: -1

Related Questions