我的用户从我的应用程序注销后,必须显示登录屏幕以允许其他登录。
用户可能会改变,所以我将不得不再次出现主屏幕。上面有一个像我一样的代码:
// 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的状态以避免显示上次登录信息?
答案 0 :(得分:0)
您需要新的干净的故事板初始化并将其呈现在旧的故事板上。使用nib名称初始化故事板然后实例化初始viewController并显示它。
答案 1 :(得分:0)
这是因为当你解雇loginViewController
时mainViewController
还活着。
您可以使用当前的故事板实例化一个新的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)
})
}