我有一个应用程序,这是一个单视图应用程序.我有一个从根视图控制器链接到所有子控制器的导航控制器.

在每个子控制器中,我都有一个注销按钮.我想知道我是否可以调用一个函数,该函数将取消一路打开的所有控制器,无论用户按下注销时当前打开的是哪个控制器?

我的基本出发点是:

func tryLogout(){
     self.dismissViewControllerAnimated(true, completion: nil)
     let navigationController = UINavigationController(rootViewController: UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("LoginViewController") )
     self.presentViewController(navigationController, animated: true, completion: nil)
}

我正在寻找执行这项任务的最有效的方法.我将把我的注销功能放在一个单独的utils文件中,但是我不能使用self.我仍然有一个问题,那就是知道应该动态关闭哪些控制器.

Update

func tryLogout(ViewController : UIViewController){
     print("do something")
     dispatch_async(dispatch_get_main_queue(), {
         ViewController.navigationController?.popToRootViewControllerAnimated(true)
         return
     })
 }

这是实现我想要的东西的最好方式吗?

推荐答案

您可以拨打:

self.view.window!.rootViewController?.dismiss(animated: false, completion: nil)

应取消根视图控制器上方的所有视图控制器.

Ios相关问答推荐

iOS SwiftUI需要不带箭头显示弹出窗口""

如果条件不满足,S从@ViewBuilder返回什么?

如何让3张组合的`SF Symbol`图片围绕一个特定点旋转?

在SwiftUI中插入绘制重复形状

一堆UIGraphics方法在iOS 17中被弃用,没有明确的替代方法?

SWIFT-仅解码感兴趣的元素

为什么AVSpeechSynthesizer复制的信息比我的文本多?

如何从单独的视图更改修饰符的值

SwiftUI - TextField - 在焦点上清除 Double 类型的值,在取消 Select 时恢复

.frame() 修饰符的位置如何影响视图?

我需要二进制文件来进行 App Store 应用程序传输吗?

我正在try 制作一种 Select 器样式,例如设置中的外观 Select 器

添加到单个自定义视图时,Swiftui 项目会在所有视图中重复

来自 c++ 的runtime_error未在 iOS 中捕获

光标未显示在 UITextView 中

如何缩小 UIImage 并使其同时变得清晰/锐利而不是模糊?

Swift 将 unix 时间转换为日期和时间

如何在 Swift 中将新单元格插入 UITableView

文本未包含在 swift UI 中

如何在 iphone 屏幕中间显示活动指示器?