ios - 添加新的 Root View Controller

标签 ios swift

我正在开发一个 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/

相关文章:

ios - 如何获取特定日期的 Facebook 好友生日?

ios - 组织地理引用数据的最佳方式是什么?

ios - openURL 并在 IOS 9/10 中打开

iOS 图表未显示所有 xAxis 值

ios - 如何使用 Alamofire Swift 读取 Content-Length HTTPResponse

ios - swift 上的自定义标记图像(MapKit)

ios - 如何获取对当前 UITableViewCell 的引用

ios - 如何使用ReactiveKit将本地镜像绑定(bind)到 ImageView ?

ios - 将父类作为目标添加到 UIButton

ios - SwiftUI TextField 最大长度