2010-06-19 15 views
5

Estoy tratando de hacer un ejemplo muy simple de un UINavigationController. Aquí está mi código:UINavigationController: ejemplo más simple

- (void)viewDidLoad { 
    [super viewDidLoad]; 

Esta próxima línea funciona, o al menos no explota.

navController = [[UINavigationController alloc] initWithRootViewController:self]; 
    self.title = @"blah"; 

    PageOneController *one = [[[PageOneController alloc]init] autorelease]; 

Ejemplo 1. Esta línea NADA

[navController pushViewController:one animated:NO]; 

Ejemplo 2. Esta línea trabaja (pero no controlador nav, por supuesto)

[self.view addSubview:one.view]; 
} 

¿Por qué estoy incapaz de empujar Ver las instancias de ViewController en NavController y ver cómo cambia la pantalla?

Nota: que darse cuenta de que yo podría tener mis conceptos hacia atrás y no necesita tener mi punto de vista hace referencia a un UINavigationController ... o algo así.

Respuesta

11
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    PageOneController *one = [[[PageOneController alloc]init] autorelease]; 
    one.title = @"blah"; 
    navController = [[UINavigationController alloc] initWithRootViewController:one]; 
    [self.view addSubview:navController.view]; 
} 

La idea básica detrás de esto es que el controlador de vista raíz de un mando de navegación es el controlador que ver será mostrado por primera vez en la jerarquía de mando de navegación. El controlador raíz no es el controlador de vista al que conecta el controlador de navegación. Espero que esto ayude.

+0

Respuesta perfecta. Gracias y buena suerte en SO. –

4

Simplemente estoy repitiendo la respuesta de @E-ploko, que es 100% correcta (por eso lo marqué como la mejor respuesta).

Necesita más vistas (y ver controladores) para usar el UINavigationController. Una de ellas es casasUINavigationController, y su rootViewController es la primera página de la serie (la que no tiene "respaldo").

Me deshice de las dependencias externas para la muestra del código: obviamente este es un código de muestra monolítico, no un código real monolítico.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIViewController *one = [[UIViewController alloc] init]; 

    [one.view setBackgroundColor:[UIColor yellowColor]]; 
    [one setTitle:@"One"]; 

    navController = [[UINavigationController alloc] initWithRootViewController:one]; 
    // here 's the key to the whole thing: we're adding the navController's view to the 
    // self.view, NOT the one.view! So one would be the home page of the app (or something) 
    [self.view addSubview:navController.view]; 

    // one gets reassigned. Not my clearest example ;) 
    one = [[UIViewController alloc] init]; 

    [one.view setBackgroundColor:[UIColor blueColor]]; 
    [one setTitle:@"Two"]; 

    // subsequent views get pushed, pulled, prodded, etc. 
    [navController pushViewController:one animated:YES]; 
}