2013-07-19 23 views
29

W moim MainStoryBoard chcę naciskać viewController do detailView ale otrzymuję ten błąd:Pushing kontroler nawigacyjny nie jest obsługiwana

NSInvalidArgumentException', reason: 'Pushing a navigation controller is not supported'

ustawić identyfikator id „JSA” dla viewController w serii ujęć.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == 0) { 
     SWSJSAViewController *viewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"JSA"]; 
     [self.navigationController pushViewController:viewController animated:YES]; 
    } 
} 
+40

Musisz nacisnąć kontroler widoku, a nie inny kontroler nawigacyjny. Jeśli naprawdę chcesz wyświetlić inny kontroler nawigacyjny, musisz go przedstawić, a nie naciskać. – rmaddy

+0

Dziękuję bardzo gotowy, błąd zniknął, ale idzie do tableViewController, chcę go na detal, Dzięki – Jose

+0

Zobacz ten wątek http://stackoverflow.com/questions/10817305/pushing-a-navigation -kontroler-jest-nieobsługiwany-wykonuje-segues/23102975 # 23102975 (Mam odpowiedź, która zadziałała dla mnie, ale być może jedna z innych zrobi dla ciebie lewę.) – LordParsley

Odpowiedz

31

Podobnie jak w przypadku rmaddy w komentarzach, które próbujesz nacisnąć kontroler nawigacyjny.

Kontrolery nawigacyjne powinny być prezentowane (za pośrednictwem presentViewController lub mogą być dodane jako childViewController) i ViewControllers powinny być popchnięte.

1

Kiedy mówimy o popychanie kontroler nawigacyjny, to najprawdopodobniej że chcesz go zaprezentować.

  1. Przedstawiając UINavigationController

Jest to najczęstszy sposób i to jest to, co chcesz robić w większości przypadków. UINavigationController nie można przekazać, można go wyświetlić tylko z nowym kontrolerem widoku root.

MyViewController* vc = [[MyViewController alloc] 
     initWithNibName:@"MyController" bundle:nil]; 

UINavigationController *myNav = [[UINavigationController alloc] initWithRootViewController: vc]; 

[self presentViewController:myNav animated:YES completion:nil]; 

Co robisz tutaj, jest najpierw utworzyć UINavigationController a następnie ustawić konieczne UIViewController jako kontrolera głównego.


  1. Pushing UINavigationController

Jeśli masz hierarchię ViewControllers i trzeba wcisnąć kontroler widoku, który zawiera kontroler nawigacji wewnątrz kroki :

1) Naciśnij ViewController, zawierający UINavigationController.

Aby PushUINavigationController najpierw utworzyć podklasę UIViewController, która będzie wrapper-/zamykanym pojemniku klasa dla UINavigationController i jego treści.

ContainerViewController* vc = [[ContainerViewController alloc] init]; 

2) Dodanie UINavigationController jako kontroler widoku dziecko

W viewDidLoad swojego pojemnika (które właśnie instancja) po prostu dodać coś takiego:

MyNavController* myNav = [[MyNavController alloc] init]; 
[myNav willMoveToParentViewController:self]; 

myNav.view.frame = self.view.frame; //Set a frame or constraints 
[self.view addSubview:myNav.view]; 
[self addChildViewController: myNav]; 
[myNav didMoveToParentViewController:self]; 

Co robisz tutaj w zasadzie tworzymy kontroler nawigacyjny i dodajemy go jako kontroler do twojego opakowania. to jest to! Pomyliłeś wciśnięty swój UINavigationController.

Powiązane problemy