一尘不染

单一功能可消除所有打开的视图控制器

swift

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

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

我的基本开始:

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。而且我还有一个问题,那就是知道要动态关闭哪些控制器。

建议将更新 弹出到根视图控制器。所以我的尝试是这样的:

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

这是实现我所追求的最好的方法吗?


阅读 235

收藏
2020-07-07

共1个答案

一尘不染

您可以致电:

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

应该关闭根视图控制器上方的所有视图控制器。

2020-07-07