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

这样运行起来的效果是

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

}

```

好这个实现的效果就是:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 7,311评论 1 14
  • 前言 最近忙完项目比较闲,想写一篇博客来分享一些自学iOS的心得体会,希望对迷茫的你有所帮助。博主非科班出身,一些...
    GitHubPorter阅读 5,313评论 9 5
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 10,215评论 1 9
  • 1.自定义控件 a.继承某个控件 b.重写initWithFrame方法可以设置一些它的属性 c.在layouts...
    圍繞的城阅读 8,907评论 2 4
  • { 11、核心动画 需要签协议,但是系统帮签好 一、CABasicAnimation 1、创建基础动画对象 CAB...
    CYC666阅读 5,481评论 2 4