【问题标题】:Logout issue in TabBar based app基于 TabBar 的应用程序中的注销问题
【发布时间】:2013-02-26 02:07:33
【问题描述】:

这是一个很常见的问题,但是在尝试了很多解决这个问题之后,我最终决定将它发布在 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 不是一个好习惯。

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

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

请帮忙。

提前致谢。

【问题讨论】:

    标签: iphone ios objective-c uitabbarcontroller uitabbar


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 模态视图是临时视图,当某些事情需要用户注意或需要提供额外的选择或功能时出现。使用模态视图作为应用程序的主视图是不正确的使用方式。
        • 实际上在加载模态视图之前,我的整个应用程序都已加载完毕。
        • @rocky: 嗯...我的一个大学,在 ios dev 中的经历如何安静地向我推荐了这种方法。好吧,我想我将不得不做更多的研究。 :)
        【解决方案4】:

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

        【讨论】:

        • 确保在 self.view 上添加标签栏控制器。之后注销代码,请遵循- [NavigationControllerName popToRootViewControllerAnimated:Yes];
        猜你喜欢
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多