我正在开发一个具有登录页面的IOS应用程序。当用户首次打开应用程序时,我希望“登录”页面一开始就显示。
用户登录后,我想更改root并将其分配给“ 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)
}
}
我可以使用注销方法来导航回登录并清除后退堆栈吗?
答案 0 :(得分:0)
当用户按注销时,应将登录视图控制器设置为根视图控制器。更改根视图控制器时,将清除所有以前的导航堆栈。
您可以使用此代码淡入淡出动画来更改根视图控制器。
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)
}
注意:将此函数复制到Appdelegate.swift文件中,然后在视图控制器中,您可以像这样使用它:
@IBAction func logoutBtnPressed(_ sender : Any) {
let appDelegateObj = UIApplication.shared.delegate as! AppDelegate
appDelegateObj.makeRootVC(storyboardName: "Main", vcName : "YourLoginVC")
}