Cree uiTabBarController mediante progtwigción

Quiero crear una UIView para un UITabBarController

Aquí está mi código para el file .h :

 @interface TE : UIViewController <UITabBarControllerDelegate>{ UITabBarController *tabBarController; } @property (nonatomic,retain) UITabBarController *tabBarController; @end 

El método viewDidLoad :

 UIViewController *testVC = [[T1 alloc] init]; UIViewController *otherVC = [[T2 alloc] init]; NSMutableArray *topLevelControllers = [[NSMutableArray alloc] init]; [topLevelControllers addObject: testVC]; [topLevelControllers addObject: otherVC]; tabBarController = [[UITabBarController alloc] init]; tabBarController.delegate = self; [tabBarController setViewControllers:topLevelControllers animated:NO]; tabBarController.selectedIndex = 0; self.view = tabBarController.view; 

Esto crea el controller de la barra de tabs, pero cuando hago clic en un elemento de la barra de tabs, aparece un error:

Tema 1: Señal de recepción de progtwig: SIGABRT

Edit : Resolví el problema descargando y modificando la versión de http://www.iphonedevcentral.com/create-uitabbarcontroller/

Dices que no quieres crear tabBarController en appDelegate. Por qué no? ¿Dónde más lo crearías? El tabBarController tiene que ser el controller de vista raíz y no puede ser un elemento secundario de ningún otro controller de vista.

Por cierto, asegúrate de implementar:

 - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { NSUInteger tabIndex = [tabBarController.viewControllers indexOfObject:viewController]; if (viewController == [tabBarController.viewControllers objectAtIndex:tabIndex] ) { return YES; } return NO; } 
  1. Subclass UITabBarController

  2. Reemplace el método – (void) loadView e incluya el siguiente código

     MyCustomViewControllerOne* ctrl1 = [[[MyCustomViewControllerOne alloc] initWithNibName@"MyViewControllerOne" bundle: nil] autorelease]; UIViewController* ctrl2 = [[[UIViewController alloc] init] autorelease]; MyCustomControllerTwo* ctrl3 = [[[UIViewController alloc] initWithObject: myObj] autorelease]; ctrl1.title = @"First tab"; ctrl2.title = @"Second tab"; ctrl3.title = @"Third tab"; ctrl1.tabBarItem.image = [UIImage imageNamed:@"tab_image1.png"]; ctrl2.tabBarItem.image = [UIImage imageNamed:@"tab_image2.png"]; ctrl3.tabBarItem.image = [UIImage imageNamed:@"tab_image3.png"]; [self setViewControllers: @[ctrl1, ctrl2, ctrl3]]; 

Eso es practicamente todo.

Cambie self.view = tabBarController.view; a
[self.view addSubview:tabBarController.view]; Y funciona correctamente

Tratando de cambiar

self.view = tabBarController.view;

a

[self.view addSubview:tabBarController.view];

Mira si eso te ayuda.

También intente colocar esto en su método ( -(void)loadView

 - (void)loadView { UIView *mv = [[UIView alloc] initWithFrame:CGRectMake(0.0, 100.0, 320.0, 480.0)]; self.view = mv; [mv release]; } 

La razón por la que probablemente esté experimentando una pantalla en negro es porque no ha inicializado correctamente su UIView.

@Mehdi, simplemente convierta su TE en un UITabBarController en lugar de un UIViewController que luego tenga un TabBarController en él. Hace que sea mucho más fácil administrar su TabBarController. Para responder a otras personas que han indicado que solo puede tener un TabBarController como rootViewController de la window. Ese no es el caso. Un UITabBarController puede instanciarse en múltiples lugares donde necesita una navigation de menu de segundo nivel. Tener una TabBar dentro de una TabBar no tendría sentido, pero tener un Menú de navigation a la izquierda y luego tener una TabBar en cada elemento del menu tendría sentido.