2011-07-16 12 views
36

Mam projekt z kontrolerem NavigationController, który zawiera w IB pierwszy ViewController do wyświetlenia. To po prostu domyślny wzór podczas tworzenia projektu.iPhone - Zastępowanie widoku root w kontrolerze nawigacyjnym

W tym pierwszym widoku kontroler, otrzymuję pewne zdarzenie, które wysyłam do appDelegate, i chcę, aby zastąpił ten widok root innym. Nie zamierzam przejść do następnego.

Więc robię:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    // Add the navigation controller's view to the window and display. 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

- (void) goNext { 

    [self.navigationController popViewControllerAnimated:NO]; 

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; 
    [self.navigationController pushViewController:nextWindow animated:NO]; 
} 

Ale to nie działa, pierwszy viewcontroller nie poped. A druga jest logicznie wyświetlana za pomocą przycisku Wstecz.

Chcę tylko zastąpić ten pierwszy widok drugim jako początkiem procesu nawigacji.

+1

Jeśli kontrolerem widoku u góry stosu jest kontroler widoku głównego, metoda 'popViewControllerAnimated:' nie wykonuje żadnych czynności. Innymi słowy, nie możesz wyrzucić ostatniego przedmiotu na stosie. Zamiast tego możesz wypróbować metodę 'setViewControllers: animated:'. – albertamg

+0

Nie możesz po prostu zmienić swojego kontrolera rootview na NextViewController w Xib? – Deeps

Odpowiedz

78

Od UINavigationController reference:

tę metodę (popViewControllerAnimated :) usuwa wierzchnią kontroler widok ze stosu i sprawia nowy szczyt stosu aktywnego kontrolera widoku. Jeśli kontroler widoku na szczycie stosu jest kontrolerem widoku głównego, ta metoda nie wykonuje niczego. Innymi słowy, nie można pop ostatni przedmiot na stosie.

Zamiast tego można wypróbować metodę setViewControllers:animated:.

- (void) goNext { 

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease]; 
    [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES]; 
} 
+14

Bardziej nowoczesny wersja: 'UIViewController cd * = [[UIStoryboard storyboardWithName: @ "MainStoryboard": zerowe wiązki] instantiateViewControllerWithIdentifier: @ "MySceneId"];' 'self.navigationController.viewControllers = @ [cd];' – wbarksdale

17

Jeśli kontrolerem widoku u góry stosu jest kontroler widoku głównego, popViewControllerAnimated nie wykonuje żadnych czynności. Innymi słowy, nie możesz wyrzucić ostatniego przedmiotu na stosie.

zastępować użycie widok główny kontroler tą metodą:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 
Powiązane problemy