2013-08-14 9 views
9

Na kontrolerze widoku mam przycisk, który przedstawia inny kontroler widoku. Z drugiego kontrolera widoku mogę przejść do innych kontrolerów widoku, ale niekoniecznie do tego, który mnie tu dostarczył. Jeśli tak, jak mogę usunąć oryginalny kontroler widoku?iPhone - Usuwanie przedstawionego kontrolera widoku

+0

można co do tego, co zostało próbowałem dotąd pisać kod. Co również używasz do załadowania kontrolera widoku. Czy to jest UINavigationController? Czy próbowałeś otworzyć kontroler widoku? –

+0

wygląda dla mnie jak owcze pytanie ... proszę wkleić jakiś kod, który próbowałeś do tej pory ... –

+0

Jeśli użyję metody dismissViewController lub popViewController, czy żaden z nich nie przeniesie mnie do oryginalnego kontrolera widoku? Szukam sposobu, jeśli to możliwe, aby odrzucić początkowy kontroler widoku. – Carmichael

Odpowiedz

25

Twój opis jest nieco niejasne tutaj. Nie może być 3 różne przypadki tutaj:

  1. przechodzenie przez kontrolera nawigacji hierarchii
  2. wyrwanie się z kontrolerem nawigacyjnym hierarchii do innego kontrolera widoku
  3. tylko dodanie innego kontrolera widoku, aby prąd w kontroler nawigacji stosu

W pierwszym przypadku można użyć metod UINavigationController:

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated 
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated 

i użyj właściwości viewControllers, aby poruszać się po stosie.

Ina drugi, jeśli chcesz, aby wyrwać się hierarchię do jednego zupełnie innego kontrolera widoku, a następnie po prostu zrobić to:

[[[UIApplication sharedApplication] keyWindow].rootViewController dismissViewControllerAnimated:YES completion:nil]; 
[[UIApplication sharedApplication] keyWindow].rootViewController = newController; 

lub nawet lepiej: dodać drugi wiersz w bloku zakończenia pierwszej linii.

A w trzecim przypadku, jeśli chcesz tylko zrobić jeden wyjątek, ale poza tym pobyt w kontroler nawigacyjny stosie, a następnie za pomocą metod:

- (void)addChildViewController:(UIViewController *)childController 
- (void)removeFromParentViewController 
17

To zależy od tego, jak faktycznie przedstawiłeś bieżący kontroler widoku. Jeśli było modally, następnie

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

Jeśli został wciśnięty przy użyciu kontrolera nawigacji:

[self.navigationController popViewControllerAnimated:YES]; 
Powiązane problemy