我认为这是一个非常常见的用例,因为我在几个应用程序中看到过。但是经过几天的努力,我仍然在努力解决这个问题。我有以下结构:
UITabBarController
-- UINavigationController1
---- UITableViewController1
-- UINavigationController2
---- UITableViewController2
现在我在UITableViewController2上有一个注销按钮。当我点击该注销按钮时,我希望所有的视图控制器都被解除分配,所有的视图卸载。基本上像启动应用程序一样重新开始。我希望每个UITableViewController的viewDidLoad再次被调用。
我尝试了以下方法,在UITableViewController2上采取注销操作时在我的AppDelegate中调用:
-(void) logout {
for (UINavigationController* ctrl in self.tabBarController.viewControllers) {
[ctrl popToRootViewControllerAnimated:NO];
ctrl.visibleViewController.view = nil;
}
[self.tabBarController.view removeFromSuperview];
[self.window addSubview:self.tabBarController.view];
不过很遗憾,似乎它不起作用了?
有什么想法可以实现这样的事情吗?我在visibleViewController中看到iOS4和iOS5有不同的行为。我这里没有使用任何模态视图控制器。有什么需要注意的地方吗?
更新:我没有使用ARC。
谢谢 mbh
popToRootViewController
中执行,此时我真的很喜欢Adam Kemp的想法,他建议你添加一个NSNotificationCenter
事件用于捕获UserDidLogOut
,并在你的视图控制器中处理该事件。 - Nick Merrill