码迷,mamicode.com
首页 > 其他好文 > 详细

UITableview

时间:2016-08-31 13:37:45      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

一.UItableview的初始化
     一般来说,UItableview我们都将其定义为当前界面的私有变量(在.m文件中生明 @property (nonatomic,strong)UITableView);初始化的时候,为了思路清晰,我们使用懒加载的方法:
//重写newsTableView的get方法
-(UITableView *)newsTableView{
    if(!_newsTableView){
//初始化
// UITableViewStylePlain和UITableViewStyleGrouped是UItableview的两种风格,使用UITableViewStyleGrouped的时候,他会自己帮你分开每一个分区,而UITableViewStylePlain就需要自己实现下面的代理方法设置每个分区的头和脚的视图和高度(下面会细讲)
        _newsTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
//设置是否显示滚动(进度)条
        _newsTableView.showsVerticalScrollIndicator = NO;
//设置分割线的颜色
        _newsTableView.separatorColor = [UIColor colorWithRed:244/255.0 green:245/255.0 blue:246/255.0 alpha:1.0];
//设置分隔线的样式
        _newsTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;//
//设置背景色
        _newsTableView.backgroundColor = [UIColor colorWithRed:244/255.0 green:245/255.0 blue:246/255.0 alpha:1.0];
//设置代理,(代理需要实现 <UITableViewDataSource,UITableViewDelegate>两个代理)
        _newsTableView.dataSource = self;
        _newsTableView.delegate = self;
    }
    return _newsTableView;
}

二.代理实现

     在加载UItableview的控制器上,实现两个代理:
     首先,引入协议: @interface NewsCenterViewController ()<UITableViewDataSource,UITableViewDelegate> 
     然后,实现方法:
 
方法1.//返回当前这个tableView的分区数。
默认是返回1,如果自己有改动,就必须重新实现
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

 

 
方法2.//返回当前这个tableView的当前分区的行数。
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 1;
}

 

 
方法3.//返回当前这个tableView的当前分区的当前行的cell。
重用机制:
目的:为了节约内存。
思想:应为很多cell的样式一样,只是里面的内容不同,所以,当前页面没显示的那些cell就可以用来再次利用,因为不管怎样,界面上显示的cell个数是有限的。
方法:在程序运行过程中,会有一个重用队列,当我们向上滑动屏幕的时候,最上面的cell就会不显示,这是我们就将其放入这个队列中;最下面的cell会随着拖动显示出来,此时它并不是重新生成一个cell,而是现根据标识符在队列中去找有没有没用的cell,有的话就取出来,改变上面的显示内容就可以了。
不同的cell不同的样式,会用到不同的标识符,这样保证这些个cell是一样的样式(所以说,如果所有cell同样的属性,就在初始化cell的时候设定,不一样的就需要在得到cell后重新对属性赋值)
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//使用静态变量定义一个唯一的标识符
    static NSString * userDetailInfoTableViewCell = @"userDetailInfoTableViewCell";
//根据标识符,在重用队列里面找同类的cell,直接取出来
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:userDetailInfoTableViewCell];
    if(!cell){
//如果不存在(说明重用队列里面没有闲置的cell),就重新初始化一个cell,当然要指明其标识符,这样之后才能取。
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:userDetailInfoTableViewCell];
    }
//设置点击cell时的风格,这里是没有变化
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
//设置cell显示右边的箭头符号 
   cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//每次得到cell后,重新设定里面的内容
    cell.textLabel.text = @"news";
    return cell;
}
 

 

前面三个方法中方法2和方法3是必须实现的。
 
方法4.//返回当前这个tableView的当前分区的当前行的cell的高度。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     if(indexPath.section==1 && indexPath.row == 2){//第2区的第3行
          return 100;
     }
     return 120;//可能存在不同行有不同的高度,就像扣扣空间的动态一样,那就需要计算每一行的高度再返回;如果所有的行的高度都一样,就可以不用这个方法,而是直接在初始化UITableView设定UITableView.rowHeight=120;;
}

 

 
方法5.//返回当前这个tableView的当前分区的当前行的cell的高度。
 
方法6.//返回当前这个tableView的当前分区的分区头视图的高度。
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 10.0;//同返回行高度一样,可以根据参数section来判断哪一个分区头,就可以设定不同分区头的高度。
     //有头就有脚,和此函数对应的就有-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ }设定当前分区的分区脚视图的高度。
}

 

三.自定义UITableviewCell
四.cell与UITableview 的手势冲突
五.其他 

UITableview

标签:

原文地址:http://www.cnblogs.com/Yongersblog/p/5825325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!