ios – 单一功能来解除所有打开的视图控制器

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

在每个子控制器中,我有一个注销按钮.我想知道如果我可以有一个单一的功能,我可以打电话,将关闭所有已经打开的控制器,无论当用户按下注销时,当前打开什么控制器?

我的基本开始:

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
     })
 }

这将是实现我以后的最佳方式吗?

解决方法

你可以拨打:
self.view.window!.rootViewController?.dismissViewControllerAnimated(false,completion: nil)

应该将根视图控制器上的所有视图控制器关闭.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...