2015-02-13 7 views
8

Oto scenariusz:Jak powrócić do pierwszego kontrolera widoku na scenorysie?

Pierwsza scena w moim scenopisie to widok logowania. To jest UIViewController. Gdy użytkownik jest zalogowany, pokazuje widok domowy, który jest osadzony w kontrolerze nawigacyjnym. Dodaję funkcję wylogowania, która powinna zabrać mnie z powrotem do pierwszej sceny w scenorysie, która jest widokiem logowania. Jak mogę to zrobić?

Oto obraz z serii ujęć przedstawiający widok logowania -> kontroler nawigacyjny -> dom widok Storyboard

To moja realizacja tej pory. W akcji wylogowywania wyczyść sesję i przejdź do kontrolera widoku root. To nie działa, ponieważ nadal utknąłem w widoku głównym, ponieważ jest to kontroler widoku głównego kontrolera nawigacyjnego. Jeśli jednak ponownie uruchomię aplikację, użytkownik zostanie wylogowany i pozostanie przy widoku logowania.

Kod:

[self.navigationController popToRootViewControllerAnimated:NO]; 

    // Set at beginning of storyboard 
    UIStoryboard *mystoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    app.loginViewController = [mystoryboard instantiateViewControllerWithIdentifier:@"loginViewController"]; 
+2

[Użyj odwijania segue] (http://stackoverflow.com/q/12561735/335858). – dasblinkenlight

+0

Powinieneś dodać to jako odpowiedź, a ja to zaakceptuję. Również zajęło mi to trochę czasu, ponieważ działania są z UIActionSheet i SO przykład wszystkich przycisków używa.Daj mi znać, jeśli znajdziesz dobry sposób na zrobienie tego wszystkiego programowo. – okysabeni

+0

Mój komentarz nie jest pełną odpowiedzią, to tylko wskazówka. Masz [lepszą odpowiedź poniżej] (http://stackoverflow.com/a/28492711/335858), która używa tego samego pomysłu. – dasblinkenlight

Odpowiedz

6

Używaj do tego odprężania segues.

W swojej LoginViewController, zadeklarować metodę z tego podpisu

- (IBAction)unwindToLoginViewController:(UIStoryboardSegue*)segue

przejdź do HomeViewController i kontroli przeciągnij z przycisku wylogowania przycisku Wyjdź na górze okna kontrolera widoku (patrz zrzut ekranu poniżej), a następnie wybierz przesunięcie unwindToLoginViewController. To jest to!

enter image description here

+1

Mam go do pracy, ale pracuję, jak to zrobić, jeśli chcesz dopasować akcję segue do przycisku UIActionSheet (tzn. Nie ma przycisku wylogowania lub przycisk jest generowany programowo) – okysabeni

+1

Podłącz kontroler (pierwsza ikona z trzech gdzie znajduje się ikona Wyjście z przeniesienia) do ikony wyjścia. Daj odpocząć oddzielić nazwę i kiedy chcesz go uruchomić, użyj metody 'performSegueWithIdentifier: sender:'. – Rog

2

U może pop za pomocą navigationController.viewControllers.Get Zobacz wszystkie kontrolery wśród navigationController, zidentyfikować go, a następnie pop.If u popchnęły segue od LoginView do HomeView

if([self.navigationController.viewControllers[0] isKindOfClass:[LoginViewController class]]) 
    { 
     [self.navigationController popToViewController:self.navigationController.viewControllers[0] animated:YES]; 
    } 

Mam nadzieję, że to pomoże ...

+0

Nie. Widok logowania nie jest osadzony w kontrolerze nawigacyjnym. Nie ma już nic do robienia. – okysabeni

1

Wypróbuj tę odpowiedź. Najpierw utworzymy kontroler nawigacyjny. make it "to początkowy kontroler widoku". Następnie należy połączyć się z ViewControllerem jako kontrolerem widoku głównego i podłączyć kontroler domowy za pomocą przycisku Facebooka Akcja.

Kontroler nawigacyjny -> Logowanie Controller -> Home Controller

Twój Storyboard to wyglądać tak

enter image description here

Po tym, gdy wylogować z HomeViewController Następnie wystarczy dodać tą metodą:

-(IBAction)logOut_Action:(id)sender 
    { 
    [self.navigationController popViewControllerAnimated:YES]; 
    } 

Działa poprawnie. Proszę zaimplementuj w ten sposób i daj mi znać, jeśli napotkasz jakiś problem. :)

+0

@Yko: Działa, czy nie? –

+0

Hej, wymyśliłem to, ale nie tak, jak to zrobiłeś. Nie chcę, aby pasek kontrolera nawigacyjnego pojawiał się w widoku logowania. Dzięki za odpowiedź! – okysabeni

+0

OK, możesz ukryć pasek nawigacji. Ustaw "Top Bar" none w storyboard. –

1

Spróbuj:

[self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil]; 
Powiązane problemy