1

我的故事板是如下推送 - 视图 - 控制器:iOS的 - 无法TabbarController显示

enter image description here

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

我试图推动从MainVC一个新的视图控制器,采用tabbarcontroller。我希望底部的tabbar可见,但我不能。每当新的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属性为是之前我推新控制器不工作太。

我已经检查了HomeVC中的容器没有覆盖tabbar。

回答

1

发生这种情况是因为当您调用myTabbarController.navigationController上的push时,实际上在与UITabBarController控制器相同的层级上添加了一个更多的控制器。

UINavigationController 
     | 
    UITabBarController –> YourPushedViewController 

以其酒吧和它所包含的一切沿着这显然隐藏整个UITabBarController

如果你想在特定的导航标签 - 你应该UINavigationController在这个标签,然后做push使用它。

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

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

感谢您的黑魔法。有用。所以,我的故事板是按照你的建议。我将在UINavigationController上进一步学习。不过,我使用pageviewcontroller来推送它,因为它是MainVC容器内的项目的一部分。 – felixwcf

+0

可否请您提供相同@wcf的工作示例代码 – Abhishek

2

你需要在这个方案中设置您的TabBarController作为应用程序的根目录,如:

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

蚂蚁不喜欢:

NavigationController -> TabBarController -> VC1 -> VC2 

在可以ViewContoller1之间导航这样的情况下,并且ViewContoller2和TabBarContoller将保持可见状态。