我正在开发一个iOS应用程序,其中我有一个登录页面。当用户第一次打开应用程序时,我希望“登录”页面出现在最开始。
一旦用户登录,我想更改根并将其分配给“MainViewController”(在登录完成后,用户会来这里)
我之所以要这样做,是因为我想经常清除应用程序中的后台堆栈。
现在的问题是..。当我点击注销按钮时,应用程序应该再次导航到登录页面。我如何才能以一种好的方式完成这一任务?
有什么方法可以在不返回根控制器的情况下清除回堆栈吗?
如有任何意见,将不胜感激。
SigninViewController
func navigateToMain(){
if let storyboard = storyboard{
let vc = storyboard.instantiateViewController(withIdentifier: "TabViewController") as! TabViewController
UIApplication.shared.windows.first?.rootViewController = vc
self.present(vc, animated: true)
}
}
在注销方法中,我能做些什么来导航回登录并清除后台堆栈?
当用户按注销时,您应该将登录视图控制器作为根视图控制器。更改根视图控制器时,将清除所有先前的导航堆栈。
您可以在动画中使用此代码来更改根视图控制器。
func makeRootVC(storyBoardName : String, vcName : String) {
let vc = UIStoryboard(name: storyBoardName, bundle: Bundle.main).instantiateViewController(withIdentifier: vcName)
let nav = UINavigationController(rootViewController: vc)
nav.navigationBar.isHidden = true
self.window?.rootViewController = nav
let options: UIView.AnimationOptions = .transitionCrossDissolve
let duration: TimeInterval = 0.6
UIView.transition(with: self.window!, duration: duration, options: options, animations: {}, completion: nil)
}
注意:将此函数复制到AppDelate.Swive文件中,然后在视图控制器中使用它,如下所示:
@IBAction func logoutBtnPressed(_ sender : Any) {
let appDelegateObj = UIApplication.shared.delegate as! AppDelegate
appDelegateObj.makeRootVC(storyboardName: "Main", vcName : "YourLoginVC")
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。