versiones tutorial plataforma objective compiler objective-c iphone

tutorial - objective-c++



Cómo combinar TabBar+Navigation con XCode (6)

Aquí hay un tutorial que pude trabajar.

También leí la documentación oficial del SDK sobre el tema: combinación de la barra de pestañas y los controladores de navegación . Como todavía estoy aprendiendo, el tutorial me ayudó más que los documentos.

NOTA: en el tutorial, no creo que deba subclasificar UINavigationController, y estoy experimentando con esta idea ahora.

Estoy intentando combinar una aplicación de Navegación TabBar +.

Tengo 5 barras de pestañas, 4 son una lista de cosas y profundizar en las vistas de detalles.

Intento seguir este tutorial:

http://www.iphonedevforums.com/forum/iphone-sdk-development/124-view-controller-problem.html

Pero siempre obtenga una vista en blanco.

Esto es lo que hago, con un proyecto limpio:

  • Comienzo con una aplicación de plantilla TabBar.
  • Puse 5 botones de la barra de pestañas.
  • Creo un controlador como:

    @interface FirstViewController: UINavigationController {

    }

  • Puse la ventana principal.xib en modo árbol y cambio la primera vista seleccionada a FirstViewController
  • Selecciono el Controlador TabBar en el constructor Interfaz, voy a los atributos TabBar y cambio la clase al controlador de navegación.
  • Seleccione la primera vista y ponga el nombre de punta "SecondView"

En respuesta, obtengo una pantalla en blanco.

Debo agregar que quiero navegar desde las vistas de detalles, no desde las ventanas principales.

es decir, en la barra de pestañas de la ventana principal 1 está la lista de personas. Selecciono una persona y luego quiero navegar a la ventana de detalles.


En primer lugar, nunca desea subclasificar UINavigationController o UITabBarController.

En segundo lugar, no obtuve lo que hiciste, pero una secuencia correcta para crear un controlador de navegación dentro de un controlador de barra de pestañas es algo como esto:

// in MyAppDelegate.h UINavigationController *nc1, *nc2; FirstTabRootViewController *vc1; SecondTabRootViewController *vc2; UITabBarController *tbc; // in MyAppDelegate.m nc1 = [[UINavigationController alloc] init]; vc1 = [[FirstTabRootViewController alloc] initWithNibName:nil bundle:nil]; vc1.tabBarItem.title = @"Tab 1"; vc1.tabBarItem.image = [UIImage imageNamed:@"tab1.png"]; vc1.navigationItem.title = "Tab 1 Data"; nc1.viewControllers = [NSArray arrayWithObjects:vc1, nil]; nc2 = [[UINavigationController alloc] init]; vc2 = [[SecondTabRootViewController alloc] initWithNibName:nil bundle:nil]; vc2.tabBarItem.title = @"Tab 2"; vc2.tabBarItem.image = [UIImage imageNamed:@"tab2.png"]; vc2.navigationItem.title = "Tab 2 Data"; nc2.viewControllers = [NSArray arrayWithObjects:vc2, nil]; tbc = [[UITabBarController alloc] init]; tbc.viewControllers = [NSArray arrayWithObjects:nc1, nc2, nil];

Tenga en cuenta que es su controlador de vista el que controla el texto / icono en la barra de pestañas y en la barra de navegación. Crea una instancia de UINavigationController para cada una de tus pestañas; UINavigationController contiene una pila de controladores de vista (vea la propiedad viewControllers) que debe contener al menos un elemento: su controlador raíz para esa pestaña. También crea un UITabBarController para administrar las pestañas.

Por supuesto, puede (y probablemente debería) usar el constructor de interfaz en lugar del código para instanciar las clases mencionadas y establecer las propiedades. Pero es importante que entiendas lo que sucede detrás de escena; El constructor de interfaces no es más que una forma conveniente de instanciar y configurar objetos.

Espero que esto sea útil; refina tu pregunta si no es así.


Intenté crear una aplicación para el iPhone con UITabBarController y algún UINavigationController dentro de ella y tuve los mismos problemas que "mamcx". Con tu código de ejemplo lo hago funcionar :) Muchas gracias.

Así es como funciona para mí.

// YOURS fourthNavigation = [[UINavigationController alloc ] init ]; fourthViewController = [[[FourthTabRootController alloc] initWithNibName:@"FourthView" bundle:nil] autorelease]; fourthNavigation.tabBarItem.title = @"YOURS"; fourthNavigation.viewControllers = [NSArray arrayWithObjects:fourthViewController, nil]; // Add self-defined UIViewControllers to the tab bar tabBarController.viewControllers = [NSArray arrayWithObjects:firstNavigation,secondNavigation, thirdNavigation, fourthNavigation, nil]; // Add the tab bar controller''s current view as a subview of the window [window addSubview:tabBarController.view];

Los otros UINavigationControllers "firstNavigation, ..." se crean de la misma manera. Cargué los elementos de vista de los archivos nib que están conectados a mis clases UIViewController subclase. No necesita agregar una Barra de navegación en el IB a su vista, porque el UINavigationController ya tiene una. Entonces solo necesita establecer el título en "initWithNibName"

// The designated initializer. Override to perform setup that is required before the view is loaded. - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Custom initialization self.title = @"YOURS"; } return self; }

Espero que eso ayude.



Todavía aparece la pantalla en blanco en Inicio de la aplicación después de implementar el código anterior. Donde lo estoy escribiendo mal

nc1 = [[UINavigationController alloc] init]; nc2 = [[UINavigationController alloc] init]; vc1 = [[FirstRootViewController alloc]initWithNibName:@"FirstRootViewController" bundle:nil]; vc1.tabBarItem.title = @"Item 1"; vc1.tabBarItem.image= [UIImage imageNamed:@"home.png"]; vc1.navigationItem.title = @"Tab1 Data"; nc1.viewControllers = [NSArray arrayWithObjects:vc1,nil]; vc2 = [[SecondRootViewController alloc]initWithNibName:@"SecondRootViewController" bundle:nil]; vc2.tabBarItem.title = @"Item 2"; vc2.tabBarItem.image= [UIImage imageNamed:@"home.png"]; vc2.navigationItem.title = @"Tab2 Data"; nc2.viewControllers = [NSArray arrayWithObjects:vc2,nil]; tbc = [[UITabBarController alloc]init]; tbc.viewControllers = [NSArray arrayWithObjects:nc1,nc2,nil]; [window addSubview:tbc.view]; [window makeKeyAndVisible];