2012-10-11 13 views
5

Próbuję wykonać prostą operację. Przynajmniej wydaje się to proste. Ok, chciałbym nacisnąć widok (z kontrolerem widoku push) z widoku, który został wciśnięty za pomocą modalnego kontrolera widoku.Sterownik widoku push w widoku kontrolera widoku modalnego

View1 - (push przy użyciu modalnego kontrolera widoku) -> View2 - (push przy użyciu kontrolera widoku push) - View3.

Rigth teraz, robię testy, więc używam przycisku, aby rozpocząć akcję. Oto kod używam do pchania z View2 aby zobaczyć 3:

//view2.h 
UIToolbar *bar; 
UIBarButtonItem *button; 
UIToolbar *toolbar; 

} 

- (IBAction)demissModal:(id)sender; 
- (IBAction)goView3:(id)sender; 

@end 

//view2.m 
- (IBAction)goView3:(id)sender{ 

View3 *view_3 = [[View3 alloc] initWithNibName:@"View3" bundle:nil]; 
[self.navigationController pushViewController:view_3 animated:YES]; 

} 

Jest to ten sam kod, którego używam do pchania View1 do View2, i to działa. Ale po naciśnięciu View2 na View3, to nie działa. Masz pojęcie, dlaczego tak się dzieje? Dzięki!

+0

należy nacisnąć kontroler widoku na aktywnym kontrolerze. Sprawdź, czy to działa [self pushViewController: view_3 animated: YES]; –

Odpowiedz

11

Kontrolery widoku nie są tak naprawdę kontrolkami "modalnymi" ani "push". Modal lub Push opisują przejście między kontrolerami widoku (nazywane kodami, jeśli używasz scenorysów).

To, o czym myślę, że pytasz, to jak modalnie zaprezentować kontroler widoku, a następnie nacisnąć inny kontroler. Sztuczka polega na tym, że modalnie prezentujesz kontroler widoku nr 1, aby rzeczywiście przedstawić kontroler nawigacyjny z kontrolerem widoku głównego ustawionym jako kontroler widoku nr 1.

MyViewController *myViewController = [MyViewController alloc] init]; 
UINavigationController *navController = [UINavigationController alloc] initWithRootViewController:myViewController]; 

// Presuming a view controller is asking for the modal transition in the first place. 
[self presentViewController:navController animated:YES completion:nil]; 
// Now in myViewController, call [self.navigationController pushViewController:secondViewController animated:YES]; 

To co wygląda wykorzystaniem Storyboard: enter image description here

+0

OK działa, ale niezbyt dobrze. Gdy drugi widok jest wyświetlany z przejściem modalnym, zobaczyłem przycisk, który należy nacisnąć, aby zmienić na Widok3. Jeśli raz naciśniesz przycisk, wyświetli on ten sam widok z przejściem modalnym, a jeśli naciśniesz inny widok, będzie to samo z dziwnym przejściem. Nie wiem, dlaczego tak się dzieje. – joan2404

+0

Który kod jest uruchamiany po naciśnięciu przycisku, który powinien spowodować naciśnięcie? Powinno to być coś w stylu '[self.navigationController pushViewController: <# UIViewController #> animated: YES]; ' – MaxGabriel

+0

Oto kod, którego używam: View * myViewController = [[View2 alloc] init]; View3 * descripcio = [[View3 alloc] init]; UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: View2]; [self presentViewController: navController animated: YES completion: nil]; [self.navigationController pushViewController: View3 animated: YES]; – joan2404

0

Spróbuj tego:

[self.navigationController pushViewController:view_3 animated:YES]; 
0

Przede wszystkim, nie jestem pewien, gdzie to gegant_se pochodzi.

Po drugie, jeśli wypychasz view2 z view1 w taki sam sposób, w jaki wypychasz view3 z view2, nie używasz modala.

Kiedykolwiek użyjesz kontrolera nawigacyjnego do popchnięcia kontrolera widoku, ten kontroler widoku, który został właśnie wciśnięty, ma odnośnik do kontrolera nawigacyjnego, za pomocą właściwości navigationController. Wypróbuj to:

[self.navigationController pushViewController:view_3 animated:YES]; 
+0

Przepraszam za ten gegant_se. To był tylko test i zapomniałem go zmienić. – joan2404

0

spróbuj tego kodu AlarmList jest nazwa widoku.

AlarmListScreen * loscr = [[alokacja AlarmListScreen] initWithNibName: nil bundle: nil];

[self.navigationController pushViewController: loscr animated: YES];

[loscr release]; 
Powiązane problemy