你能在UINavigationController中推送UITabBarController吗?

是不是可以在UINavigationController中推送UITabBarController? 我在旧版本的iOS中读回来但现在仍然如此?

简单地说,是的,你可以。

但仅仅因为你可以,并不意味着你应该。 UITabBarController旨在用作根级别的viewController(作为应用程序窗口的rootViewController)。 目的是为用户提供最好(最简单)的用户体验。 Apple建议保持应用程序的视图层次结构,使得从一个视图控制器到另一个视图控制器只有一条“路径”。

广泛接受的使用UITabBarController是将其设置为rootViewController ,并将UIViewControllers分配给每个“tab”。 如果你想能够从这些视图控制器中推送/弹出,你可以为每个选项卡分配一个UINavigationController ,而不是像iOS的Facebook应用程序那样使用自己的rootViewController

如果您决定将其推送到UINavigationController则建议在每个选项卡中使用简单的viewControllers ,而不是UINavigationController ,以避免多个视图层次结构。 剩下的就是你作为开发人员。 在任何情况下,易编码都会影响最终用户的体验。 优先事项始终是后者。

编辑:

  1. 创建一个UITabBarController

  2. 使用以下方法为每个选项卡设置根视图控制器:

     tabBarController.viewControllers = [NSArray arrayWithObjects: alphaController, betaController, nil]; 
  3. 将其推入导航控制器。

  4. UITabBarController类的viewDidLoad方法(建议子类)中,设置它的UITabBar项( UIBarButtonItems )。

使用UITabBarControllerDelegate ,您可以处理他们的选择。 您不必在选择选项卡时显示viewControllers。 您可以通过覆盖shouldSelectViewController:方法来改变它们的行为。

Apple说没有,但是这里有关于俄语的指南,代码为p.2 http://arm1.ru/blog/ispolzovanie-uinavigationcontroller-vmeste-s-uitabbarcontroller

我最近正致力于将UITabbarController推入UINavigationController的应用程序。 此应用程序目前在苹果商店。

我不知道为什么苹果不推荐这个以及为什么人们会面临这个问题。

@Slashik答案就是一个例子,我用同样的方法。

你可以,但由于文档说你不应该这样做,它会导致问题。 当我在导航堆栈中放置一个标签栏控制器(在我注意到文档中的信息之前)时,我发现了这一点,然后我注意到导航栏在切换选项卡时关闭它时表现得很奇怪。 我希望标签栏控制器中的一些视图控制器有一个可见的导航栏,有些则没有,但这完全不能正常工作(就像有一个延迟,导航栏隐藏并显示一个标签开关比它应该的更晚。 所以我建议不要这样做。