Combine UITabBarController con UINavigationController

Intenté usar una "aplicación con tabs" con una barra de navigation. Con la configuration pnetworkingeterminada, la barra de tabs funciona bien, pero no puedo abrir una barra de navigation. Encontré algunas cosas sobre el empuje de la barra de navigation y cosas por el estilo, pero todas las cosas que encontré fueron hace algunos años, así que no me ayudarás. Y las cosas recientes están desactualizadas, ya que iOS5 y la nueva versión de Xcode …

¿Podría alguien señalarme en la dirección correcta para combinar a para resolver este problema?

Tenga en count los siguientes hechos por favor:

  • Estoy desarrollando para iOS5
  • Estoy usando Xcode 4.2

A continuación, le indicamos cómo puede lograrlo mediante progtwigción.

Elimine la reference a su xib principal en [appName] -Info.plist

En main.m, cargue su delegado:

int retVal = UIApplicationMain(argc, argv, nil, @"myAppDelegate"); 

En el delegado de la aplicación, cargue la tabBar, el controller de navigation y la vista en el control de navigation.

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // create window since nib is not. CGRect windowBounds = [[UIScreen mainScreen] applicationFrame]; windowBounds.origin.y = 0.0; [self setWindow:[[UIWindow alloc] initWithFrame:windowBounds]]; // View Controllers for tabController (one viewController per tab) NSMutableArray *viewControllers = [[NSMutableArray alloc] init]; // first tab has view controller in navigation controller FirstView *firstView = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstView]; [viewControllers addObject:navController]; SecondView *secondView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil]; [viewControllers addObject:secondView]; // create the tab controller and add the view controllers UITabBarController *tabController = [[UITabBarController alloc] init]; [tabController setViewControllers:viewControllers]; // add tabbar and show [[self window] addSubview:[tabController view]]; [self.window makeKeyAndVisible]; return YES; } 
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. NSMutableArray *arrayViewController = [[NSMutableArray alloc] init]; UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil]; UINavigationController *navigationController1 = [[UINavigationController alloc] initWithRootViewController:viewController1]; [arrayViewController addObject:navigationController1]; UIViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil]; UINavigationController *navigationController2 = [[UINavigationController alloc] initWithRootViewController:viewController2]; [arrayViewController addObject:navigationController2]; self.tabBarController = [[UITabBarController alloc] init]; self.tabBarController.viewControllers = arrayViewController; self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; return YES; } 

En iOS 5 ya no se tolera cambiar el controller de vista por una pestaña (no hay problema antes de iOS5). El único controller aceptado es el definido en IB para esa pestaña. Por lo tanto, es necesario instalar un controller de navigation en esta pestaña y darle a su vista la barra de navigation. Luego puede presionar o abrir sus vistas deseadas sin cambiar el controller de la pestaña.

La teoría básica es que crea un UITabBarController, y luego coloca un UINavigationController dentro de ese, y luego coloca un UIViewController como el controller de vista raíz del controller de navigation. bryanmac acaba de responder con una buena muestra de código.