2017-10-14 50 views
5

Mam ekran logowania, który pobiera adres e-mail i hasło. Używam Firebase Auth.Czy istnieje łatwy sposób na wylogowanie po kliknięciu elementu nawigacyjnego na kontrolerze nawigacyjnym w trybie szybkim 4?

Ekran logowania jest osadzony w kontrolerze nawigacyjnym. Z ekranu logowania przechodzi do UserDetailsController. Na pasku nawigacyjnym znajduje się element nawigacyjny "wstecz" dołączony do kontrolera nawigacyjnego. Nie mogę tego tak naprawdę wciągnąć.

Zastanawiam się, czy istnieje łatwy sposób na kliknięcie przycisku "wstecz" i powrót użytkownika do strony logowania w celu wylogowania użytkownika. Kod wylogowania jest stosunkowo prosty w przypadku Firebase Auth. Problem, który mam, działa w LoginController, jeśli wróciłem tutaj z UserDetailsController.

Przeczytałem o używaniu self.presentingcontroller, aby określić, z którego kontrolera wróciłem, ale wciąż jestem zerowy. I nie byłem pewien, czy jest to najlepsza/jedyna opcja do określenia, z którego kontrolera nawigowałem.

Dzięki.

Odpowiedz

5

Wygląda całkiem prosto. Mam nadzieję, że ten kod pomoże.

  1. W viewDidLoad dodać funkcję tak:

    override func viewDidLoad() { 
    super.viewDidLoad() 
    
        setupLogOut() 
    
    } 
    
  2. Następnie skonfigurować funkcję jak ten z metody handler selektor jak poniżej:

    fileprivate func setupLogOut() { 
    
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(handleLogOut)) 
    
    } 
    
    @objc func handleLogOut() { 
    
        do { 
         try Auth.auth().signOut() 
    
         // Present the login controller 
         let loginController = LoginController() 
         let navController = UINavigationController(rootViewController: loginController) 
         self.present(navController, animated: true, completion: nil) 
    
        } catch let signOutErr { 
         print("Failed to sign out:", signOutErr) 
        } 
    
    } 
    
+1

Myślę, że w tym scenariuszu można bezpośrednio dodać 'self.navigationController? .popViewController (animated: true)' zamiast dodawać całość Zaprezentuj logikę kontrolera logowania. – Amit

+1

@Amit interesujące, tak myślę, że można pop bieżącego kontrolera. Myślę, że przedstawienie logowania jest nieco bardziej wyraźne (wiesz dokładnie, gdzie się wybierasz). –

1

Jeśli nie chcę dodawać metody do przycisku wstecz. możesz także użyć poniższej metody do wylogowania:

override func viewWillDisappear(animated: Bool) { 
    // Your sign out logic here.. 
} 

Powyższa metoda jest wywoływana po ponownym uruchomieniu kontrolera logowania.

+0

Dzięki. To, czego nie powiedziałem w moim pytaniu, to: Login -> UserDetail -> EmailController, więc jeśli użyję viewWillDisappear, to będzie on wywoływany, jeśli będzie działał zarówno z powrotem, jak iz powrotem. Ale thx! – Mike