我正在开发一个 IOS 应用程序,其中有一个登录页面。当用户第一次打开应用程序时,我希望“登录”页面出现在最开始的位置。
用户登录后,我想更改 root 并将其分配给“MainViewController”(登录完成后用户所在的位置)
我之所以要这样做是因为我想经常清除应用程序中的返回堆栈。
现在的问题是..当我点击注销按钮时,应用程序应该再次导航到登录页面。我怎样才能以良好的方式实现这一目标?
有什么方法可以清除返回堆栈而不返回根 Controller 吗?
任何意见都将不胜感激。
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)
}
}
在注销方法中我可以做什么来导航回登录并清除返回堆栈?
最佳答案
当用户按注销时,您应该将登录 View Controller 设置为 Root View Controller 。当您更改 Root View Controller 时,所有以前的导航堆栈都会被清除。
您可以使用此代码进行淡入动画来更改 Root View Controller 。
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 文件中,然后在您的 View Controller 中,您可以像这样使用它:
@IBAction func logoutBtnPressed(_ sender : Any) {
let appDelegateObj = UIApplication.shared.delegate as! AppDelegate
appDelegateObj.makeRootVC(storyboardName: "Main", vcName : "YourLoginVC")
}
关于ios - 添加新的 Root View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224654/