1.在tabBar控制器上添加导航控制器 导航控制器要想显示标题依赖于子控制器
之前的子控制器是我们自定义的tabBarcontroller导致我们只能切换四个页面,不能设置导航,
为了添加导航控制器所以要把传进来的childVc包装一层导航控制器并且让导航控制器成为我们tabBarcontrolle的子控制器创建好后导入头文件 把UINavigationController换成自定义的导航ZHNavigationController
图片如下:
1.1在ZHTabBarViewController.m文件中修改如下代码
ZHNavigationController *nav = [[ZHNavigationController alloc] initWithRootViewController:childVc];
[self addChildViewController:nav];
1.2设置导航标题 在写好的封装方法里添加如下代码
childVc.title = title;
2.导航控制器设置好后我们在home的控制器里实现tableview的方法 设置cell的数据演示一下导航功能
在ZHHomeViewController.m添加如下代码
//有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 20;
}
// 每行的内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
cell.textLabel.text = [NSString stringWithFormat:@"首页测试数据%lu",indexPath.row];
return cell;
}
//点击某一行 都响应
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//1设置一个跳转的页面
UIViewController *newVc = [[UIViewController alloc] init];
//跳转后控制器的颜色
newVc.view.backgroundColor = [UIColor greenColor];
//跳转后控制器的导航标题
newVc.title = @"新控制器";
//拿到我们当前控制器的导航然后执行跳转
[self.navigationController pushViewController:newVc animated:YES];
}
2.1 这样写有BUG 当跳转到下个页面的时候底部的tabBar不消失,在跳转到新控制器后还可以点击其他页面的控制器
要设置新控制器的属性hidesBottomBarWhenPushed 隐藏底部条
//当push这个控制器的时候就自动隐藏底部的tabBar
newVc.hidesBottomBarWhenPushed = YES;
3.以后消息,发现,我,这三个控制器里也要添加跳转操作所以要把这个拦截push的方法写到自定义的的导航文件里
//能拦截所有push进来的子控制器的方法
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
//如果什么都不写 就什么也不显示来所以要先调用父类的方法
//拦截所有的push方法 如果这样直接添加 我们一点开app下面的tabBar就消失来所以要判断
if (self.viewControllers.count > 0) {
//如果现在push的不是栈低控制器(最先push进来的控制器)
viewController.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:animated];
}