Continuando la Guía de desarrollo para iPhone e iPad en este artículo revisaremos los principales métodos utilizados para navegar dentro de una aplicación: UINavigationController y UITabBarController. Dependiendo del diseño que definamos podemos utilizar uno u otro, incluso los dos en la misma aplicación.

Diferencia entre UINavigationController y UITabBarController

Una imagen dice más que mil palabras, así que dos dicen muchísimo más:

Como se puede ver UINavigationController crea una jerarquía de vistas a diferencia de UITabBarController que genera instancias independientes de vistas. También es posible implementar el controlador UINavigationController dentro de los elementos de un UITabBarController.

Implementando UINavigationController y UITabBarController

1. Crear un nuevo proyecto en Xcode de tipo “Empty Aplication”

2. Agregar los siguientes elementos en AppDeletate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
UIWindow *window;
UITabBarController *tabBarController;
UINavigationController *navigationController;
}

@property (strong, nonatomic) UIWindow *window;

@end

3. Inicializa los controladores con solo código sin usar Interface Builder desde AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Inicializa los controladores
navigationController = [[UINavigationController alloc] init];
tabBarController     = [[UITabBarController alloc] init];

// Inicializa la primer vista del TabBarController
UIViewController *primerViewController      = [[UIViewController alloc] init];
primerViewController.view.backgroundColor   = [UIColor whiteColor];
primerViewController.title = @"Primero";

// Inicializa la segunda vista del TabBarController
UIViewController *segundoViewController     = [[UIViewController alloc] init];
segundoViewController.view.backgroundColor  = [UIColor whiteColor];
segundoViewController.title = @"Segundo";

// Agrega la segunda vista al controlador UINavigationController
[navigationController pushViewController:segundoViewController animated:NO];

// Agrega las vistas creadas al controlador UITabBarController
// 1. Primer Vista  = UIViewController
// 2. Segunda Vista = UINavigationController
[tabBarController setViewControllers:[NSArray arrayWithObjects:primerViewController, navigationController, nil] animated:YES];

// Libera memoria con los controladores ya utilizados
[primerViewController release];
[segundoViewController release];

// Agrega el controlador UITabBarController a la ventana principal
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

self.window.rootViewController = tabBarController;
[self.window makeKeyAndVisible];

// Retorna YES XD
return YES;
}

4. Compilar y Ejecutar

Al final obtendrás dos vistas desde el UITabBarController y una de ellas contendrá un UINavigationController. También se pueden implementar estos controladores utilizando Xcode que de manera muy intuitiva permite arrastrar y establecer los controladores respectivos.

En caso de presentar algún inconveniente en los pasos puedes descargar el proyecto y realizar el proceso de “Build and Run”. Recuerda cualquier inquietud sobre este tema o la guía en general no dudes en comentarlo.

Repositorio en GitHub : MDW-GuiaiOS05-UIViewController