¿Debería usar un UINavigationController individual por barra de tabs

Según Apple , puedo combinar UINavigationController y UITabBarController usando el código, por ejemplo

 MyViewController1* vc1 = [[MyViewController1 alloc] init]; MyViewController2* vc2 = [[MyViewController2 alloc] init]; MyViewController3* vc3 = [[MyViewController3 alloc] init]; MyNavRootViewController* vc4 = [[MyNavRootViewController alloc] init]; UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:vc4]; NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, vc3, navController, nil]; tabBarController.viewControllers = controllers; 

En esta configuration, solo vc4 tiene UINavigationController , pero ¿qué UINavigationController si quiero que vc1-vc3 también tenga UINavigationController ?, ¿Cómo me gustaría?

 MyViewController1* vc1 = [[MyViewController1 alloc] init]; UINavigationController* nv1 = [[UINavigationController alloc] initWithRootViewController:vc1]; MyViewController1* vc2 = [[MyViewController2 alloc] init]; UINavigationController* nv2= [[UINavigationController alloc] initWithRootViewController:vc2]; MyViewController1* vc3 = [[MyViewController3 alloc] init]; UINavigationController* nv3 = [[UINavigationController alloc] initWithRootViewController:vc3]; NSArray* controllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil]; tabBarController.viewControllers = controllers; 

¿Es este el enfoque correcto?

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. self.tabBarController = [[[UITabBarController alloc] init] autorelease]; self.tabBarController.viewControllers = [self initializeTabBarItems]; self.navigationController = [[UINavigationController alloc]init]; [self.navigationController setNavigationBarHidden:YES]; self.window.rootViewController = self.navigationController; [self.navigationController pushViewController:_tabBarController animated:YES]; [self.window makeKeyAndVisible]; return YES; } - (NSArray *)initializeTabBarItems { NSArray * retval; /* Initialize view controllers */ UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease]; UIViewController *viewController3 = [[[ThirdViewController alloc]initWithNibName:@"ThirdViewController" bundle:nil]autorelease]; UIViewController *viewController4 = [[[FourthViewController alloc] initWithNibName:@"FourthViewController" bundle:nil] autorelease]; UIViewController *viewController5 = [[[FivfthViewController alloc] initWithNibName:@"FivfthViewController" bundle:nil] autorelease]; /* Initialize navigation controllers */ UINavigationController * navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; UINavigationController * navigationController2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; UINavigationController * navigationController3 = [[UINavigationController alloc] initWithRootViewController:viewController3]; UINavigationController * navigationController4 = [[UINavigationController alloc] initWithRootViewController:viewController4]; UINavigationController * navigationController5 = [[UINavigationController alloc] initWithRootViewController:viewController5]; /* Release View Controllers */ [viewController1 release]; [viewController2 release]; [viewController3 release]; [viewController4 release]; [viewController5 release]; /* Stuff Navigation Controllers into return value */ retval = [NSArray arrayWithObjects:viewController1,viewController2,viewController3,viewController4,viewController5,nil]; /* Release Navigation Controllers */ [navigationController1 release]; [navigationController2 release]; [navigationController3 release]; [navigationController4 release]; [navigationController5 release]; return (retval); } 

Puedes probar esto …

Sí Howard, tu enfoque está bien. Apple dice esto también. También UITabbarController mismo enfoque mientras trabajo con UITabbarController con UINavigationController y funciona muy bien para mí.

Debería tener un UINavigationController por pestaña de su TabBarController. Entonces tu segundo enfoque es correcto. No creo que puedas reutilizar el mismo controller de navigation para todas las tabs.

Sí, su enfoque es correcto.

Si tiene que navegar por las vistas en la pestaña, esa pestaña debe tener un controller de navigation.

 UINavigationController * navigationCtrl = [[UINavigationController alloc] initWithRootViewController:firstTabViewCtrl]; [arrTabs addObject:navigationCtrl]; 

Sea prudente, no hay necesidad de la pestaña Controlador de navigation dentro.

  [arrTabs addObject:firstTabViewCtrl];