先编译几个子视图控制器
//*子视图控制器*/
@property (nonatomic, strong) tableVC *firstVC;
@property (nonatomic, strong) ViewController1 *secondVC;
@property (nonatomic, strong) ViewController2 *thirdVC;
@property (nonatomic, strong) ViewController4 *fourVC;
//*当前视图控制器*/
@property (nonatomic, strong) UIViewController *currentVC;
@property (nonatomic, strong) UIScrollView *headScrollView;
@property (nonatomic, strong) NSMutableArray *itemArray;
@property (nonatomic, strong) UIView *contentVie
第一步:头部列表视图的创建
_itemArray = [NSMutableArray arrayWithObjects:@"头条",@"今日",@"焦点",@"呵呵" ,nil];
_headScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 20, [UIScreen mainScreen].bounds.size.width, 44)];
_headScrollView.backgroundColor = [UIColor colorWithWhite:0.902 alpha:1.000];
for (int i = 0; i<_itemArray.count; i++) {
UIButton *itemButton = [[UIButton alloc]initWithFrame:CGRectMake(i*([UIScreen mainScreen].bounds.size.width/_itemArray.count), 0, [UIScreen mainScreen].bounds.size.width/_itemArray.count, 44)];
itemButton.tag = 100+i;
itemButton.backgroundColor = [UIColor clearColor];
NSDictionary *dic = @{NSForegroundColorAttributeName:[UIColor purpleColor],NSFontAttributeName:[UIFont systemFontOfSize:14.0f]};
[itemButton setAttributedTitle:[[NSAttributedString alloc]initWithString:_itemArray[i] attributes:dic] forState:UIControlStateNormal];
[itemButton addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[_headScrollView addSubview:itemButton];
}
[_headScrollView setContentSize:CGSizeMake([UIScreen mainScreen].bounds.size.width, 44)];
_headScrollView.showsHorizontalScrollIndicator = NO;
_headScrollView.showsVerticalScrollIndicator = NO;
[self.view addSubview:_headScrollView];
第二步:设置视图展示子视图VC的frame
_contentView = [[UIView alloc]initWithFrame:CGRectMake(0, 64, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 64)];
_contentView.backgroundColor = [UIColor clearColor];
[self.view addSubview:_contentView];
第三步:添加子视图控制器
{
_firstVC = [[tableVC alloc]init];
[self addChildViewController:_firstVC];
_secondVC = [[ViewController1 alloc]init];
[self addChildViewController:_secondVC];
_thirdVC = [[ViewController2 alloc]init];
[self addChildViewController:_thirdVC];
_fourVC = [[ViewController4 alloc]initWithNibName:@"ViewController4" bundle:nil];
[self addChildViewController:_fourVC];
//默认展示的是第一个子视图控制器*/
//调整子视图控制器的Frame已适应容器View
[self fitFrameForChildViewController:_firstVC];
//设置默认显示在容器View的内容
[self.contentView addSubview:_firstVC.view];
_currentVC = _firstVC;
}
//点击事件
- (void)buttonClick:(UIButton *)sender{
if ((sender.tag == 100 && _currentVC == _firstVC) || (sender.tag == 101 && _currentVC == _secondVC) || (sender.tag == 102 && _currentVC == _thirdVC) || (sender.tag == 103 && _currentVC == _fourVC)) {
return;
}
switch (sender.tag) {
case 100:{
[self fitFrameForChildViewController:_firstVC];
[self transitionFromOldViewController:_currentVC toNewViewController:_firstVC];
}
break;
case 101:{
[self fitFrameForChildViewController:_secondVC];
[self transitionFromOldViewController:_currentVC toNewViewController:_secondVC];
}
break;
case 102:{
[self fitFrameForChildViewController:_thirdVC];
[self transitionFromOldViewController:_currentVC toNewViewController:_thirdVC];
}
case 103:{
[self fitFrameForChildViewController:_fourVC];
[self transitionFromOldViewController:_currentVC toNewViewController:_fourVC];
}
break;
}
}
- (void)fitFrameForChildViewController:(UIViewController *)chileViewController{
CGRect frame = self.contentView.frame;
frame.origin.y = 0;
chileViewController.view.frame = frame;
}
//转换子视图控制器
- (void)transitionFromOldViewController:(UIViewController *)oldViewController toNewViewController:(UIViewController *)newViewController{
[self transitionFromViewController:oldViewController toViewController:newViewController duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations:nil completion:^(BOOL finished) {
if (finished) {
[newViewController didMoveToParentViewController:self];
_currentVC = newViewController;
}else{
_currentVC = oldViewController;
}
}];
}
//移除所有子视图控制器
- (void)removeAllChildViewControllers{
for (UIViewController *vc in self.childViewControllers) {
[vc willMoveToParentViewController:nil];
[vc removeFromParentViewController];
}
}