2010-06-19 7 views
5

J'essaie de faire un exemple très simple d'un UINavigationController. Voici mon code:UINavigationController: Exemple le plus simple

- (void)viewDidLoad { 
    [super viewDidLoad]; 

Cette ligne suivante fonctionne, ou du moins ne fonctionne pas.

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

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

Exemple 1. Cette ligne ne rien

[navController pushViewController:one animated:NO]; 

Exemple 2. CETTE LIGNE WORKS (mais pas de contrôleur de navigation, bien sûr)

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

Pourquoi suis-je incapable de pousser Instances ViewController sur le navController et voir le changement d'écran?

Note: Je me rends compte que je pourrais avoir mes concepts en arrière et je ne suis pas besoin d'avoir mon avis faisant référence à une UINavigationController ... ou quelque chose.

Répondre

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

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

L'idée de base est qu'un contrôleur de contrôleur de navigation vue racine est le contrôleur qui sera affiché voir d'abord dans la hiérarchie du contrôleur de navigation. Le contrôleur racine n'est pas le contrôleur de vue auquel vous branchez le contrôleur de navigation. J'espère que cela t'aides.

+0

Réponse parfaite. Merci et bonne chance pour SO. –

4

Je ne fais que répéter la réponse de @ E-ploko, qui est 100% correcte (c'est pourquoi je l'ai marquée meilleure réponse).

Vous avez besoin de plus de vues (et de contrôleurs de vue) pour utiliser le UINavigationController. L'un d'eux abrite le UINavigationController, et son rootViewController est la première page de la série (celle qui n'a pas de "retour"). Je me suis débarrassé des dépendances externes pour l'échantillon de code: il s'agit évidemment d'un code monolithique, pas d'un code réel monolithique.

- (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]; 
} 
Questions connexes