2012-02-08 22 views
22

Tengo un controlador tabbar como controlador de vista raíz. Me gustaría precargar las vistas de la pestaña [1,2,3] (la pestaña 0 se carga como la primera pestaña automáticamente).Cargar todas las vistas de TabBar

Básicamente me gustaría que el código en viewdidload se ejecute antes de que el usuario toque la pestaña.

Gracias

Respuesta

29

si se toma su punto de vista código de inicialización y moverlo en lugar de loadView viewDidLoad puede obligar a cada uno de los UIViewControllers que son parte de su UITabBarController a ser cargados simplemente llamando viewController.view. Esto sucede porque un UIViewController creará el objeto de vista a través de la función loadView cuando se le solicite.

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

o más simplemente

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

En el ciclo for, creo que se refería a viewController.View. ¡Trabajos! –

+0

Tienes razón, actualicé mi respuesta. –

+1

Y creo que te refieres a @selector (ver) en tu segunda opción. – Wex

-1

equivalente Swift ...

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

Error "expresión se resuelve en un valor-I no utilizado" – Josh

1

si tiene UINavigationController antes de que sus puntos de vista

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

SWIFT 3 no funciona –

15

en iOS 8, creé una subclase de UITabViewCont rodillo llamado TSMainBarViewController. En la función de viewDidLoad TSMainBarViewController, me acaba de agregar este código:

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

Entonces todos los viewControllers (ViewController raíz del UINavigationController) se puede cargar. Todos mis viewControllers se crean en StoryBoard. No implemente la función loadView en el UIViewController.


Swift 3 Código de EligyD:

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

Para manejar los controladores de la ficha, que podría o no tener controladores de navegación:

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

Swift 3:

En viewDidLoad() de su UITabBarController

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

Si sus todos los controladores de vista bajo el controlador de la barra de pestañas tienen una barra de navegación incorporado en ellos:

Swift 3

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

usuario solución de Panda no funcionó para mí.

Cuestiones relacionadas