【问题标题】:UITabbarcontroller with nested pages - cannot get tab bar control to show root带有嵌套页面的UITabbarcontroller - 无法让标签栏控件显示根
【发布时间】:2011-09-21 21:39:47
【问题描述】:

我使用 UITabbar 控件导航到我的应用程序的顶级页面。每个顶级页面使用命令按钮导航到其他 5 个页面以进行更深入的钻取。当用户选择下一个标签栏项目时,他们没有导航到根目录,而是最终到达了他们在层次结构中最后阅读的页面。我正在使用 XCode 4,并且标签栏是使用 IB 创建的。

如何更改此行为以使标签栏按钮始终导航到顶级页面?非常感谢您的帮助,因为我已经花了很多天试图解决这个问题。

【问题讨论】:

  • 什么是页面?视图控制器?
  • 是的,每个“页面”都是一个带有 nib 文件的 viewController

标签: objective-c ios xcode


【解决方案1】:

我相信如果您的标签在其根目录下有 UINavigationController,这将起作用

//somewhere in the initialization process
tabBarController.delegate = self

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
    UINavigationController *navController = (UINavigationController *)viewController;
    if([navController.viewControllers count]>0)
        [navController popToRootViewControllerAnimated:NO];
}

【讨论】:

  • +1 除了,您不需要检查视图控制器的数量。无论如何,只要流行。
  • 感谢您的帮助,非常感谢!我正在尝试实现它,但遇到了更多困难,因为我发现 -(void)tabBarController....... 没有被调用。我在我的 AppDelegate 中输入代码。有任何想法吗?感谢期待。
【解决方案2】:

我已经实现了 UITabBar,每个按钮加载一个单独的视图控制器,每个视图控制器都有一个导航控制器作为向下钻取界面。当点击标签栏上的每个按钮时,都会加载 UIViewController 并负责处理向下钻取。

这听起来像是您想要做的。由于我不确定您所说的“页面”是什么意思,我不知道您是如何实现在标签栏上点击按钮时发生的更改。听起来您有一个 UIViewController,而这并不是 UITabBar 的设计方式。我可能是错的,所以我认为需要更多解释。

如果您使用多个 UIViewControllers 实现,您可能需要考虑即使在更改选项卡时用户是否仍希望继续深入挖掘。不确定您的应用程序做了什么,但这可能是理想的行为。

【讨论】:

  • 非常感谢。我正在使用多个视图控制器,当用户单击选项卡栏然后深入钻取,然后单击另一个选项卡栏按钮,然后单击上一个选项卡栏按钮时,它们最终会到达完成的位置。我希望它们被定向到该选项卡栏选择的顶层。我花了很长时间研究,找不到让它工作的方法。Baddidi 代码看起来很有希望,但不幸的是我无法调用 -(void)tabBarController 代码。
  • 只是好奇用户如何“钻得更深”。您是否使用导航控制器来执行此操作?
猜你喜欢
  • 2011-07-29
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2019-10-23
  • 1970-01-01
  • 2011-12-09
相关资源
最近更新 更多