-
理论基础
- 任何控制器都可以添加子控制器
- 如果A(childVc)控制器的view添加到B(ViewController)控制器的view上,那么A(childVc)控制器就要成为B(ViewController)控制器的子控制器
-
重要性
- push
- 只有导航控制器才具有跳转功能
- 只要是导航控制器的子控制器就可以拿到当前导航控制器
- self.navigationController:首先判断下自己是不是导航控制器子控制器,如果不是,判断自己的父控制器是不是导航控制器的子控制器,一直查找,直到没有父控制器
- modal
- 判断下自己是否被Modal,如果是,就把当前控制器dismiss,如果不是,判断下自己的父控制器有没有被modal,如果有,把父控制器dismiss,如果还是没有找到,继续去查找,一直到没有父控制器
- push
-
实现
- 需求
- app的顶部实现类似于
UITabBarController
的功能
- app的顶部实现类似于
- 思路
- 多控制器管理的应用
- 添加所有的子控制器
- 设置所有子控制器的标题按钮
- 代码
/**
- 需求
-
添加所有的子控制器
*/
-(void)setupAllChildViewController{// 社会
ZQSocietyViewController *societyVc = [[ZQSocietyViewController alloc] init];
societyVc.title = @"社会";
[self addChildViewController:societyVc];// 头条
ZQTopLineViewController *topLineVc = [[ZQTopLineViewController alloc] init];
topLineVc.title = @"头条";
[self addChildViewController:topLineVc];// 热点
ZQHotViewController hotVc = [[ZQHotViewController alloc] init];
hotVc.title = @"热点";
[self addChildViewController:hotVc];
}
/* -
设置按钮的内容
*/
-(void)setupButtonTitle{
NSUInteger count = self.titleView.subviews.count;
for (int i = 0; i < count; i++) {
// 获取每个标题按钮
UIButton btn = self.titleView.subviews[i];
// 给按钮设置tag
btn.tag = i;
// 创建对应的控制器
UIViewController vc = self.childViewControllers[i];
// 设置对应控制器的标题
[btn setTitle:vc.title forState:UIControlStateNormal];
}
}
/ -
标题按钮的单击事件
*/
-(IBAction)btnTitleClick:(UIButton *)button {
// 移除控制器view容器的所有子控件
[self.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
// 获取点击按钮对应的子控制器
NSUInteger i = button.tag;
UIViewController *vc = self.childViewControllers[i];
// 设置当前子控制器view的背景颜色为选中的按钮的背景颜色
vc.view.backgroundColor = button.backgroundColor;
// 设置当前子控制器的frame
vc.view.frame = self.contentView.bounds;
// 把当前子控制器的view添加到容器控制器的的view上
[self.contentView addSubview:vc.view];
}
网友评论