基于TabBar的应用程序中的注销问题

时间:2013-02-26 02:07:34

标签: iphone ios objective-c uitabbarcontroller uitabbar

这是一个非常常见的问题,但在经过多次努力解决问题之后,最后我决定将其发布在StackOverFlow.com上

我有一个基于标签栏的应用。标签栏在AppDelegate.m中加载,如下所示:

  self.tabBarController.viewControllers = @[viewController1, viewController2 , viewController3 , viewController4 , viewController5];

我的第五个标签有一个退出按钮。当用户点击注销时,我想清除/重置整个应用程序并转到登录页面,这是一个modalviewcontroller。

我在退出时尝试过关注:

 NSMutableArray * vcs = [NSMutableArray
                        arrayWithArray:[self.tabBarController viewControllers]];
[vcs removeAllObjects ];//ObjectAtIndex:4];
[self.tabBarController setViewControllers:vcs];

这将从标签栏中删除所有视图。但是当我再次登录时,没有显示任何内容。我想显示我的主屏幕,即默认选中的标签项目1。

我已经读过,手动再次调用didFinishLaunchingWithOptions不是一个好习惯。

有没有办法可以重置所有标签栏并重新重新初始化它们?

这将帮助我解决与此情况相关的另一个问题。当用户注销并再次登录,并且未清除视图控制器时,登录后将再次显示注销页面。而不是家庭视图控制器。

请帮忙。

提前致谢。

4 个答案:

答案 0 :(得分:2)

如果你真的想重新开始,你应该放一个方法,让我们在app委托中调用它 - (void)setupTabBarController,并在启动时从应用程序中调用它:didFinishLaunchingWithOptions:。稍后当您想要重置时,再次从登录页面调用该方法。此方法将在其中创建所有标签栏控制器的视图控制器,并将标签栏控制器设置为窗口的根视图控制器。

但是,您需要这样做并不是很清楚,这取决于注销时所有控制器处于什么状态。再次显示注销页面的问题可能会以更简单的方式修复。

答案 1 :(得分:1)

嗯,没有显示任何内容,因为您删除了视图并且从未将它们添加回来。

注销后无需从标签栏中删除视图控制器。您可以编写一个方法来重置每个视图控制器中的所有数据,然后将所选选项卡设置为您想要的。

答案 2 :(得分:1)

我知道,这不是你问题的真正答案,但这也许可以帮助你(因为我不能对帖子发表评论但我必须这样发帖:))。

当用户在我的标签栏应用程序中注销时,我在“重置”导航堆栈时遇到了一些问题。在开始的时候,我将tabbar-controller作为根控制器并以模态方式显示登录屏幕,但是一旦用户退出,它就会安静地重置导航堆栈。 我最终做了什么,它对我来说很安静,我将登录控制器设置为根控制器,登录后以模态方式显示选项卡导航。在注销时我只是再次关闭tabbar-controller - 一切都从头开始。 也许你可以尝试一下,看看它是否更容易处理。

答案 3 :(得分:0)

您应该在第二个视图控制器上添加tabBar控制器。主视图控制器显示主屏幕。导航第二个视图控制器时,然后在此处添加tabBar。