2016-08-24 75 views
0

我有一个具有自己的根的多个(4)导航控制器的iOS应用程序。从所有堆栈中删除所有控制器

结构为:

NavController(根:登录)

- > TabBarController(首页) - (搜索) - (档案)

------> NavController (根:首页)

-------------> TableController

-----------------> DetailController

------> NavController(根:搜索)

------> NavController(根:档案)(这里注销按钮)

当我在上这些navigationcontrollers(即Profile),有一个注销按钮,应该带我到初始登录屏幕,我如何确保所有导航堆栈中的所有控制器在加载登录之前已被删除?

我已经试过poptorootviewcontroller但是这也只是个人资料页

回答

0

可以使用NSNotificationCenter来处理这个问题。

当用户注销时,发布本地通知到你的应用程序中使用:

NSNotificationCenter.defaultCenter().postNotificationName("kLogOut", object: self) 

然后,在每个选项卡的根视图控制器,注册侦听该通知,并实施选择器功能:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourViewController.logOutNotificationAction), name: "kLogOut", object: nil) 

func logOutNotificationAction() { 
    self.navigationController?.popToRootViewControllerAnimated(false) 
}