我有一个应用程序,它是一个单视图应用程序。我有一个从根视图控制器链接到所有子控制器的导航控制器。
在每个子控制器中,我都有一个注销按钮。我想知道是否可以有一个我可以调用的函数,该函数将关闭沿途打开的所有控制器,无论用户按下注销时当前打开了哪个控制器?
我的基本开始:
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?.dismiss(animated: false, completion: nil)
应该关闭根视图控制器上方的所有视图控制器。