2010-06-19 13 views
5

Ich versuche, sehr einfaches Beispiel für eine UINavigationController zu tun. Hier ist mein Code:UINavigationController: Einfachstes Beispiel

- (void)viewDidLoad { 
    [super viewDidLoad]; 

Diese nächste Zeile funktioniert, oder zumindest nicht explodieren.

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

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

Beispiel 1. Diese Linie macht nichts

[navController pushViewController:one animated:NO]; 

Beispiel 2. Diese Linie WORKS (aber keine nav-Controller, natürlich)

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

Warum bin ich nicht in der Lage zu schieben ViewController Instanzen auf dem navController und sehen Sie den Bildschirm ändern?

Hinweis: Ich weiß, daß ich meine Konzepte zurück zu haben und ich brauche nicht meine Ansicht haben UINavigationController ... oder etwas verweisen.

Antwort

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

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

Die grundlegende Idee dahinter ist, dass eine Root-View-Controller der Navigationssteuerung ist die Steuerung, die zuerst in der Navigationssteuerung Hierarchie angezeigt werden kann. Der Root-Controller ist nicht der View-Controller, an den Sie den Navigationscontroller anschließen. Hoffe das hilft.

+0

perfekte Antwort. Danke und viel Glück auf SO. –

4

Ich Neuformulierung nur @ E-ploko Antwort, die zu 100% korrekt ist (weshalb ich es beste Antwort markiert).

Sie brauchen mehr Ansichten (und View-Controller), um die UINavigationController zu verwenden. Einer von ihnen Häuser die UINavigationController und seine rootViewController ist die erste Seite der Serie (die, die kein „zurück“ hat).

Ich habe die externen Abhängigkeiten für das Code-Beispiel los: offensichtlich ist dies monolithischen Beispielcode, nicht monolithischen realen Code.

- (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]; 
} 
Verwandte Themen