Tengo un UITabBarController creado programáticamente que gestiona 4 subclases de UIViewController. Algo así como:¿Cómo hacer que UITabBarController cargue los controladores de vista de forma perezosa?
//Create Controller 1
self.terminal = [[[TerminalController alloc] initWithNibName:@"TerminalView" bundle:nil] autorelease];
UINavigationController* navTerminal = [[[UINavigationController alloc] initWithRootViewController:terminal] autorelease];
navTerminal.title = __(@"Terminal");
navTerminal.navigationBar.barStyle = UIBarStyleBlackOpaque;
navTerminal.tabBarItem.image = [UIImage imageNamed:@"tab_terminal.png"];
//Create Controller 2
self.history = [[[HistoryController alloc] initWithNibName:@"HistoryView" bundle:nil] autorelease];
UINavigationController* navHistory = [[[UINavigationController alloc] initWithRootViewController:history] autorelease];
navHistory.title = __(@"History");
navHistory.navigationBar.barStyle = UIBarStyleBlackOpaque;
navHistory.tabBarItem.image = [UIImage imageNamed:@"tab_history.png"];
//Create Controller 3
self.settings = [[[SettingsController alloc] initWithNibName:@"SettingsView" bundle:nil] autorelease];
UINavigationController* navSettings = [[[UINavigationController alloc] initWithRootViewController:settings] autorelease];
navSettings.title = __(@"Settings");
navSettings.navigationBar.barStyle = UIBarStyleBlackOpaque;
navSettings.tabBarItem.image = [UIImage imageNamed:@"tab_settings.png"];
//Create Controller 4
HelpController* help = [[[HelpController alloc] initWithNibName:@"HelpView" bundle:nil] autorelease];
UINavigationController* navHelp = [[[UINavigationController alloc] initWithRootViewController:help] autorelease];
navHelp.title = __(@"Help");
navHelp.navigationBar.barStyle = UIBarStyleBlackOpaque;
navHelp.tabBarItem.image = [UIImage imageNamed:@"tab_help.png"];
//Create Tab Bar an add it's view to window.
self.tabBar = [[[UITabBarController alloc] initWithNibName:nil bundle:nil] autorelease];
tabBar.viewControllers = [[[NSArray alloc] initWithObjects:navTerminal, navHistory, navSettings, navHelp, nil] autorelease];
tabBar.delegate = self;
[window addSubview:tabBar.view];
¿Hay una manera de contar la UITabBarController para cargar los controladores de vista con pereza? ej, cuando el usuario hace clic en uno de los elementos de la barra de pestañas o cuando se llama a tabBarController setSelectedIndex?
Tuve el mismo problema que el OP y este código funcionó perfectamente para mí. ¡¡Gracias!! Pude reducir el tiempo de inicio de mi aplicación en 2 segundos completos. –
En realidad, estoy haciendo un poco más de trabajo y pruebas con esto y me encontré con un problema. Si presento un Controlador de Vista Modal y luego desestimo ese modal, cuando regrese al Controlador de Pestaña su interfaz está completamente estropeada. Mi UITabBar se ha movido, la UIView que es la subvista del controlador de la barra de pestañas personalizada se ha extendido para ocupar más de la pantalla. ¿Te has encontrado con problemas como este y, de ser así, has encontrado una solución? –
@Kenny Wyland, no he tenido ningún problema como este, pero no creo que haya intentado mostrar una vista modal sobre él. No puedo pensar en ninguna razón fuera de mi cabeza que se portaría mal así, sin embargo. – zpasternack