![git 地址](https://github.com/lyp1992/MultipleTabbar)
最近使用宝宝树app的时候发现他有一个功能,点击leftBarButtonItem竟然让我产生了跳到另一个app的感觉,引起了我想自己实现的想法。下面就是我实现的逻辑和代码。
首先建立两个继承UITabBarController的控制器。在第一个tabbarControl中写这些代码,给他添加子控制器
```
- (void)viewDidLoad {
[super viewDidLoad];
[self addChildVC:[[FirstViewController alloc] init] withTitle:@"第一个"];
[self addChildVC:[[SecondViewController alloc] init] withTitle:@"第二个"];
[self addChildVC:[[ThirdViewController alloc] init] withTitle:@"第三个"];
}
-(void)addChildVC:(UIViewController *)VC withTitle:(NSString *)title{
VC.title = title;
MainNavViewController *mainVC = [[MainNavViewController alloc]initWithRootViewController:VC];
[self addChildViewController:mainVC];
}
```
这里我用一个自定义的navigationController包装了一下。
这样运行起来的效果是
现在我再写第一个tabbarcontroller,代码和上面差不多。
```
- (void)viewDidLoad {
[super viewDidLoad];
[self addChildVC:[[FourViewController alloc] init] withTitle:@"第四个"];
[self addChildVC:[[FiveViewController alloc] init] withTitle:@"第五个"];
}
-(void)addChildVC:(UIViewController *)VC withTitle:(NSString *)title{
VC.title = title;
MainNavViewController *mainVC = [[MainNavViewController alloc]initWithRootViewController:VC];
[self addChildViewController:mainVC];
}
```
这里我用同一个NavigationController 包装了这个tabbarcontroller。
现在要做的事情就是怎么把这两个tabbarcontroller联系起来。我们在第一个tabbarcontroller的第一个自控制器中写了一个按钮,用于跳转
```
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
UIButton *but = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 200, 100)];
[but setTitle:@"跳转到另一个tabbar" forState:UIControlStateNormal];
[but addTarget:self action:@selector(senderClick:) forControlEvents:UIControlEventTouchUpInside];
but.backgroundColor = [UIColor grayColor];
[self.view addSubview:but];
}
```
实现点击放的时候把现在的这个tabbar和navi隐藏就可以跳转,
```
-(void)senderClick:(UIButton *)sender{
//隐藏现在的tabbar和navi
[self.navigationController.navigationBar setHidden:YES];
[self.tabBarController.tabBar setHidden:YES];
YPSecondTabBarController *secTab = [[YPSecondTabBarController alloc]init];
[self.navigationController pushViewController:secTab animated:YES];
}
```
但是着这样做是会有bug的,因为你从第一个tabbarController中回来的时候,第一个tabbarcontroller要回复原样,所以要在他的viewWillAppear:中把把隐藏属性设置回来
```
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController.navigationBar setHidden:NO];
[self.tabBarController.tabBar setHidden:NO];
}
```
好这个实现的效果就是: