从所有堆栈中删除所有控制器
问题描述:
我有一个具有自己的根的多个(4)导航控制器的iOS应用程序。从所有堆栈中删除所有控制器
结构为:
NavController(根:登录)
- > TabBarController(首页) - (搜索) - (档案)
------> NavController (根:首页)
-------------> TableController
-----------------> DetailController
------> NavController(根:搜索)
------> NavController(根:档案)(这里注销按钮)
当我在上这些navigationcontrollers
(即Profile
),有一个注销按钮,应该带我到初始登录屏幕,我如何确保所有导航堆栈中的所有控制器在加载登录之前已被删除?
我已经试过poptorootviewcontroller
但是这也只是个人资料页
答
可以使用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)
}