iOS - 无法使用TabbarController显示推送视图控制器

时间:2017-04-06 14:58:37

标签: ios objective-c uiviewcontroller uitabbarcontroller show-hide

我的故事板如下:

enter image description here

UINavigationController 
    |
 UITabbarController
      |
    HomeVC - Container
                 |
               PageViewController
                    |
                  MainVC | MenVC | WomenVC | ElectronicsVC ...

我尝试使用tabbarcontroller从MainVC推送一个新的视图控制器。我希望底部的标签栏可见,但我不能。每次按下新的viewcontroller时,它都将全屏显示。

在我的NavigationHelper.m中,

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainV3" bundle:nil];
    MyNewViewController *myNewVC = [storyboard instantiateViewControllerWithIdentifier:@"MyNewViewController"];
    [myTabbarController setHidesBottomBarWhenPushed:NO];
    [myTabbarController.navigationController pushViewController:myNewVC animated:YES];

    // I have checked myTabbarController and myNewVC instances are not nil.

我在这个设计中使用pageviewcontroller的原因是因为我在tabbarcontroller的第一项中需要很少的视图控制器。

在推送新控制器之前,将tabbarcontroller setHidesBottomBarWhenPushed 属性设置为YES。

我已检查HomeVC内的容器未覆盖标签栏。

2 个答案:

答案 0 :(得分:2)

您需要将TabBarController设置为应用程序的根目录,就像在此方案中一样:

TabBarController -> Tab1 -> UINavigationController -> ViewContoller1 -> ViewContoller2.

ant不喜欢:

NavigationController -> TabBarController -> VC1 -> VC2

在这种情况下,您可以在ViewContoller1和ViewContoller2之间导航,TabBarContoller将保持可见。

答案 1 :(得分:1)

这是因为当您在push上调用myTabbarController.navigationController时,实际上在与UITabBarController控制器相同的层次结构级别添加了一个控制器。

UINavigationController 
      |
  UITabBarController  –> YourPushedViewController

显然隐藏了整个UITabBarController及其栏及其包含的所有内容。

如果您希望在特定的标签中进行导航,则应将UINavigationController放在此标签中,然后push使用它。

所以你的新层次结构应该是这样的。

UITabBarController
    |
   FirstTab — SecondTab — ...
    |
   UINavigationController
    |
   HomeVC - Container
              |
           PageViewController
                |
              MainVC | MenVC | WomenVC | ElectronicsVC ...