我有一个带有四个标签的标签栏控制器。对于一个选项卡,我创建了一个带有导航视图控制器和简单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];
}
}
查看控制器和标签栏控制器位于不同的故事板中。
为什么不在视图中显示标签栏?
答案 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个不同的故事板。
主要故事板:
其他故事板:
视频here。