一个app嵌套多个tabBar

![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包装了一下。

这样运行起来的效果是

一个app嵌套多个tabBar_第1张图片

现在我再写第一个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];

}

```

好这个实现的效果就是:

一个app嵌套多个tabBar_第2张图片

你可能感兴趣的:(一个app嵌套多个tabBar)