在swift 4中单击导航控制器上的后退导航项时,有一种简单的注销方法吗?

时间:2017-10-14 12:47:37

标签: swift xcode firebase-realtime-database

我有一个登录界面,上面有电子邮件和密码。我正在使用firebase Auth。

登录屏幕嵌入在导航控制器中。从登录屏幕转到UserDetailsController。导航控制器附带的导航栏中有一个“后退”导航项。我实际上无法把它拖成一个出口。

我想知道是否有一种简单的方法来点击“后退”并且用户返回登录页面以退出用户。使用firebase Auth,注销代码相对简单。如果我从UserDetailsController返回到这里,我遇到的问题是在LoginController中工作。

我已经阅读了关于使用self.presentingcontroller来确定我从哪个控制器回来但是我一直都没有。而且我不确定这是否是确定我从哪个控制器导航回来的最佳/唯一选择。

感谢。

2 个答案:

答案 0 :(得分:5)

看起来非常简单。希望这段代码能有所帮助。

  1. 在viewDidLoad中添加如下函数:

    override func viewDidLoad() {
    super.viewDidLoad()
    
        setupLogOut()
    
    }
    
  2. 然后用这样的选择器处理程序方法设置这样的函数:

    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 :(得分:1)

如果您不想将方法添加到后退按钮。您也可以使用以下方法注销:

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

当您弹回登录控制器时,上面的方法会被调用。