2009-01-25 8 views
10

Estoy intentando combinar una aplicación de navegación TabBar +.Cómo combinar la navegación TabBar + con el código X

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

trato de seguir este tutorial:

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

Pero siempre se obtiene una vista en blanco.

Esto es lo que hago, con un proyecto de limpieza:

  • que empezar con una aplicación de plantilla TabBar.
  • Pongo 5 botones de barra de pestañas.
  • puedo crear un controlador como:

    FirstViewController @interface: UINavigationController {

    }

  • pongo el window.xib principal en el modo de árbol & cambiar la primera vista seleccionada a FirstViewController
  • Selecciono el Controlador TabBar en el constructor Interfaz, vaya a los atributos de TabBar & cambie la clase al controlador de navegación.
  • seleccionar la vista de puño & poner el nombre de la semilla "SecondView"

En respuesta, me sale una pantalla en blanco.

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

i.e en la barra de pestañas de la ventana principal 1 es la lista de personas. Selecciono una persona y luego quiero navegar a la ventana de detalles.

Respuesta

1

Aquí hay un tutorial con el que pude trabajar.

También leí la documentación oficial del SDK sobre el tema: Combining Tab Bar and Navigation Controllers. 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.

+1

Me tomó un poco de mirar alrededor, pero el tutorial al que hizo referencia fue/se movió. Ahora está en: [esta ubicación] (http://codenugget.org/how-to-embed-a-navigation-controller-inside-a) – Critter

15

En primer lugar, nunca desea subclasificar UINavigationController o UITabBarController.

En segundo lugar, yo no entendí bien lo que hizo, sino una secuencia correcta para crear un controlador de navegación dentro de un controlador de la 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 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í.

+1

¡Genial! Спасибо, Андрей, очень помогло! – Darmen

+0

esto ayudó mucho gracias. Estaba buscando un buen controlador de barra de pestañas creado mediante programación. – Jake

1

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. Cardo los elementos de vista desde 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. Por lo tanto, 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.

2

Todavía aparece la pantalla en blanco Encendido 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]; 
0

Salida "Adición de una navegación Controlador a una interfaz de barra de pestañas "bajo View Controller Catalog for iOS que lo guía paso a paso para ver cómo puede ser esto exactamente eved

Cuestiones relacionadas