iOS - 注销后重置UITabBarController / UIViewController状态

时间:2017-06-23 21:12:55

标签: ios swift swift3 uiviewcontroller uitabbarcontroller

我的用户从我的应用程序注销后,必须显示登录屏幕以允许其他登录。

用户可能会改变,所以我将不得不再次出现主屏幕。上面有一个像我一样的代码:

// MainScreenViewController.swift
func onLogoutButtonTouch(_ sender: AnyObject) {
    mainViewController.present(loginViewController, animated: true, completion: {completed in
        mainViewController.dismiss(animated: true, completion: nil)
    })
}

// LoginViewController.swift
func onLoginSuccess() {
    loginViewController.present(mainViewController, animated: true, completion: nil)
}

问题

重新登录后显示主屏幕后,mainViewController的最后一个状态似乎没有变化,包含其他用户的数据,而且我没有&# 39;我想要那个。

有没有办法完全重置mainViewController的状态以避免显示上次登录信息?

2 个答案:

答案 0 :(得分:0)

您需要新的干净的故事板初始化并将其呈现在旧的故事板上。使用nib名称初始化故事板然后实例化初始viewController并显示它。

答案 1 :(得分:0)

这是因为当你解雇loginViewControllermainViewController还活着。

您可以使用当前的故事板实例化一个新的loginViewController,然后如下所示:

let loginVC = storyboard?.instantiateViewController(withIdentifier: "`your view controller storyboard ID here`")
mainViewController.present(loginVC, animated: true, completion: {completed in
    mainViewController.dismiss(animated: true, completion: nil)
})

或者使用委托模式重置登录VC(如果它已经存在)。例如,引入一个名为reset的方法,并在注销用户的VC上调用它。

protocol LogoutListener {
    func resetLoginPage()
}

// LoginViewController.swift
func onLoginSuccess() {
    mainViewController.logoutListener = self
    loginViewController.present(mainViewController, animated: true, completion: nil)
}

// MainScreenViewController.swift
func onLogoutButtonTouch(_ sender: AnyObject) {
    logoutListener?.resetLoginPage()
    mainViewController.present(loginViewController, animated: true, completion: {completed in
        mainViewController.dismiss(animated: true, completion: nil)
})
}