ios-新闻类app基础框架搭建

scrollerView和tableView组合使用(网易新闻demo)

搭建界面

1. 界面sb内部拖拽两个scrollerView(1.titleScrollerView2.contentScrollerView)

2. 对titleScrollerView做布局

  • 利用for循环添加labe (为什么不使用button 是因为button 对于label来说功能多,但是这里我们只需要点击,所以不用button)
1.
-(void)setUpTitleScrollView{

//建议这里的 i 写成NSInteger类型  ,为了以后很多使用情况,因为系统能够根据你的32 还是64位 去用那种类型  

  for(int i=0,i<7;i++)
    {
    UILabel*label=[UILabel alloc]init];
    label.text=
    label.frame=
    label.backgroudColor=
     [ label addGestureRecognizer:[UITapGestureRecognizer alloc]initWithTarGet:self action:@selector:(labelClick:)]];
     //这里要明白,label不是继承至UIControl 所有没有addTarget方法
     //但是可以添加手势监听器,有了这个手势不管你是不是按钮都可以监听事件
     
     //默认label的用户交互功能是关闭的
      label.userInteractionEnabled=YES;
      [self.titleScrollView addSubview:label];    
}
  //设置contentsize
  1.self.titleScrollView.contentSize=CGSizeMake(7*labelW,0);
  2.self.contentScrollView.contentSize=CGSizeMake(7*self.contentScrollView.frame.size.width,0);
 
    
  };
 2. 
  //实现顶部label点击事件
  
  

3.通过索引(可以自己定义个index 将tag标记赋值给index)来确定我们点击的是哪一个label

3.1
//label拿到tag
label.tag=i;

3.2
//监听顶部label点击事件中使用tag
-(void)LABELClick:(UITapGestureRecognizer*)tap{

 NSInteger index=tap.view.tag;

***用这个tag做什么事情呢??   
答:是为了在点击label过后contenOffset定位到相应的tableView(先偏移到相应的位置再进行加载tableView)***

4.拿到索引(通过label.tag=i给点击的label确定了索引)确定偏移位置

注意了: 拿索引(点击的label)的时候如果你使用的是[self.titleScrolView.subviews indexOfObject:tap.view] ;通过这种方式的时候必须将垂直水平滚动条隐藏(sb右边直接勾去或者代码的方式隐藏),不然subviews 也包括那两个

总结以上拿到索引的两种方法:
1. 
tap.view.tag    (tag 是标记控件的索引,可以自己定义数字,这里我们使用的是在创建控件的时候将i赋值给tag    tag:NSInteger类型)
2. 
self.titleScrollView.subviews
拿到索引的作用:

答: 得到偏移量的 X ;
点击头部label的时候contentScrollerView 偏移相应的 X

-(void)labelClick:(UITapGestureRecognizer*)tap{
//1.拿取点击label的索引
NSIndex index=tap.view.tag;
//根据索引,让底部scrollView滚动到对应的位置
//2.计算偏移
CGPoint offset=self.contentScrollView.contentOffset;
offset.x=index*self.contentScrollView.frame.size.width;
//3.执行动画偏移
[self.contentScrollView setContentOffset:offset animated:YES];


}


***4.通过sb拖拽几个控件在contentScrollView上面,并给contentScrollView开启pageInable ;点击titleScrollView的时候就能很明确的看到翻页效果***


通过上面的代码就可以实现点击顶部标题label,底部的contentScrollerView确实能够偏移到相应的位置

注意:contentSize和contentOffset的区别(不懂一定再复习一下)

5.偏移效果达到,进行加载tableView

添加控制器

  • 准备好控制器(也可以一口气创建完)创建类继承自UITableViewController
  • HomeViewControlelr中添加子控制器[self setupChildVc];
  • 实现添加子控制器方法{
    方法内部为:通过不同控制器创建相应不同的对象
    }

加载不同tableview 需要监听 contentScrollview的滚动,所以设置代理为控制器,并且遵守协议,且实现相应的方法

  • 根据索引从childViewControllers中取出要显示的控制器
自动滚动需要调用这个方法,在这个方法中加载要显示的VC
-(void)scrollviewDidEndScrollingAnimation:(UIScrollView*)scrollView{
1. 当前位置需要显示的控制器的索引
2. 取出要显示的控制器
3. 如果当前控制器显示过了,就直接返回
4. 添加控制器的view 到contentScrollView中;


}
手指松开scrollView后,scrolView停止减速完毕就会调用这个
-(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView{

}

你可能感兴趣的:(ios-新闻类app基础框架搭建)