1

这是一个很常见的问题,但是在尝试了很多解决问题之后,我最终决定将它发布在 StackOverFlow.com 上

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

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

我的第 5 个选项卡有一个注销按钮。当用户单击注销时,我想清除/重置整个应用程序并转到登录页面,这是一个 modalviewcontroller。

我在注销时尝试了以下操作:

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

这会从标签栏中删除所有视图。但是当我再次登录时,什么都没有显示。我想显示我的主屏幕,即默认选择的选项卡项目 1。

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

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

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

请帮忙。

提前致谢。

4

4 回答 4

2

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

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

于 2013-02-26T02:31:00.260 回答
1

我知道,这并不是您问题的真正答案,但这也可能对您有所帮助(因为我无法对帖子发表评论,但我必须像这样发布它:))。

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

于 2013-02-26T03:20:00.203 回答
1

好吧,什么都没有显示,因为您删除了视图并且从未将它们添加回。

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

于 2013-02-26T02:28:09.790 回答
0

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

于 2013-02-26T04:17:12.150 回答