2013-06-21 19 views
6

Używam UINavigationController do czynienia z kontrolerami nawigacjiUINavigationController popToViewController problem

W normalnym przypadku

RegistrationView -> LoginView -> HomeView

Od HomeView & wszelkie inne kolejne kontrolery istnieje Otwiera się jeden ekran o nazwie Setting, który ma przycisk Logout. Po kliknięciu tego przycisku w zwykłym przypadku zostanie wyświetlony ekran LoginView.

- (IBAction)btnLogoutSelected:(id)sender 
{ 
    NSArray *navArr=self.navigationController.viewControllers; 
    for (UIViewController *nav in navArr) 
    { 
     if ([nav isKindOfClass:[LoginViewController class]]) 
     { 
      [self.navigationController popToViewController:nav animated:YES]; 
     } 
    } 
} 

Gdy użytkownik zostanie zarejestrowany & Jeśli użytkownik Zalogowany raz tutaj aplikacja jest o funkcjonalność AutoLogin. W tym czasie LoginView nie będzie liczony w Nawigacji. W powyższym scenariuszu powyższy kod nie działa. Więc w tym czasie nie jestem w stanie przejść do LoginView. Potrzebuję pomocy w rozwiązaniu tego problemu. Dzięki z góry

Odpowiedz

8

W przypadku, gdy nie ma instancji LoginViewController nawigacji na stosie, po prostu go utworzyć:

LoginViewController* loginController = [[LoginViewController alloc] init]; //use appropriate initWith... method 

Następnie można użyć viewControllers własność UINavigationController . Można zastąpić bieżący kontroler widoku wartością loginController lub wstawić loginController w danym indeksie i na nim pop.

NSMutableArray* newViewControllers = [self.navigationController.viewControllers mutableCopy]; 
[newViewControllers replaceObjectAtIndex:[newViewControllers indexOfObject:self] withObject:loginController]; 
[self.navigationController setViewControllers:newViewControllers animated:YES]; 
+2

Właśnie chciałem opublikować tę samą odpowiedź :) +1 Do Johna: możesz utworzyć własny stos 'viewControllers' przez skopiowanie' RegistrationViewController' i dodanie świeżego stworzonego 'LoginViewController' powyżej, a następnie ustawienie animacji stosu zgodnie z propozycją autor: Michal –

+0

@ michal-ciuba Dzięki, działa poprawnie i mam za sobą koncepcję. –

+0

@ bogdan-weidmann Dzięki. –

3

Try This

if ([self.navigationController.viewControllers containsObject:objLogin]) { 
      [self.navigationController popToViewController:objLogin animated:TRUE]; 
     } 
     else { 
      [self.navigationController pushViewController:objLogin animated:TRUE]; 
     } 
+0

masz rację, może to działa dobrze, ale w czasie scenariusza automatycznego logowania, LoginView nie zostanie dodany do nawigacji, więc nie jest w liczbie navigationController. –

+2

W tym czasie musisz nacisnąć lub zaprezentować Login ViewController .. –

+0

masz całkowitą rację, w tym czasie nie wiedziałem dużo o nawigacji. –

Powiązane problemy