标签栏隐藏在iOS中

时间:2018-04-03 14:07:49

标签: ios objective-c uinavigationcontroller uitabbar

我有一个带有四个标签的标签栏控制器。对于一个选项卡,我创建了一个带有导航视图控制器和简单UIViewController的新故事板。对于其他选项卡,连接的视图控制器与同一故事板中的导航控制器。

当我尝试从第一个标签中的新故事板启动第一个视图控制器时,它没有显示标签栏。对于其他人,它正确显示标签栏。

 -(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
    NSInteger index = [tabBar.items indexOfObject:item];
    if(index == 0){
        UIViewController *suggestionsViewCintroller = (UIViewController *)[[UIStoryboard storyboardWithName:@"suggestions_view" bundle:nil] instantiateViewControllerWithIdentifier:@"suggestions_view_controller"];
        [self addChildViewController:suggestionsViewCintroller];
        [self.view addSubview:suggestionsViewCintroller.view];

        suggestionsViewCintroller.hidesBottomBarWhenPushed = NO;
        [suggestionsViewCintroller didMoveToParentViewController:self];
    }
}

故事板中的导航控制器配置: enter image description here

查看控制器和标签栏控制器位于不同的故事板中。

为什么不在视图中显示标签栏?

2 个答案:

答案 0 :(得分:0)

调用'addChildViewController'不要在UITabBarController中添加选项卡。 此调用只是在UITabBarController的整个视图上添加子视图控制器。所以它是合理的,你看不到tabbar。

如果你想将视图控制器添加为UITabBarController的TAB,你应该使用'viewControllers'属性,如下所示: https://stackoverflow.com/a/11399634/4322841

并且应该使用'selectedIndex'属性。

答案 1 :(得分:0)

我认为这不是将视图控制器添加到标签栏的正确方法。我想你想要对你的UITabBarController进行子类化,并将新的视图控制器添加到子类的viewDidLoad方法中的UITabBarController子类中。您可以看到此here的示例。主要代码添加在TabBarController(UITabBarController的子类)

- (void)viewDidLoad {
    [super viewDidLoad];

    UINavigationController* naviController = [[UIStoryboard storyboardWithName:@"Other" bundle:nil]
                                           instantiateViewControllerWithIdentifier:@"NavigationController"];
    naviController.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Suggestions"
                                                          image:[UIImage imageNamed:@"suggestions"] tag:2];
    self.viewControllers = [self.viewControllers arrayByAddingObject:naviController];
}

编辑示例以使用2个不同的故事板。

主要故事板:

Main storyboard

其他故事板:

enter image description here

视频here