Fork me on GitHub

UI第⼗一讲:UITableView 高级 自定义cell , 建立model进行数据传递实现MVC模式,cell自适应高度

一、自定义cell(包括cell的自定义,以及直接赋值的方法)
    1.自定义cell就是创建一个UITableViewCell的子类。
       把cell上的控件创建都封装在子类中,简化UIViewController中的代码
    2.在自定义CELL中,在init方法里面获取的宽度永远都是320。在这里只初始化和添加到contentView里面。
    在layoutSubviews里面才能获取到真正的宽度。在这个方法里面一定要记得继承父类。如果不继承父类,分割线会获取不到cell的高度。以后在开发中,一定要记得不要随便重写父类的方法,要不然你会后悔的。
 
 
示例代码分析:(这个例子包括cell的自定义,以及直接赋值的方法)
      1.需要建立tabelViewCell类, 在其中进行cell上控件的添加
      2.在tabelViewCell.m中进行初始化,和layoutSubviews的frame布局的操作
 
 
tabelViewCell.h定义属性
 
 
tabelViewCell.m进行初始化
 
 
 
 
二、建立model进行数据传递
 
 
mvc之间的数据传递模式
 
 
 
 model传递数据的方式的两种方式:
     1.定义属性,通过重写它的setter方法,实现数据传递 
     2.定义方法,然后在.m中实现方法,从而是实现数据传递
 
示例代码:(两种方法都在其中)
       步骤: 1.创建model属性类,并定义属性
      2.在tabelViewCell子类中进行属性或方法定义
      3.在viewController.m中将数据传递给model
      4.在tabelViewCell子类中,对控件进行赋值
 
viewController.m文件
 
 
 
 
 创建的student.h文件
 
 
 
 
 
tabelViewCell子类,用于创建在cell上的子控件
 
 
 
 
 
 
 
 
 
三、cell自适应高度
 
 
 
 

 

//此为cell自适应高度的计算方法  用时直接调用就行

-(CGFloat)stringHeightWithString:(NSString *)str fontSize:(CGFloat)fontSize  contentSize:(CGSize)size
{
    //第一个参数,代表最大的范围
    //第二个参数 代表是否考虑字体和字号
    //第三个参数 代表是使用什么字体和字号
    //第四个参数  用不到  基本上是 nil
    CGRect  stringRect = [str boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:fontSize]} context:nil];
return stringRect.size.height; }
1 //调用cell自适应高度方法    计算整个cell的高度  *******************************
2 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4     student *stu = self.dataArray[indexPath.row];
5     //此为cell的自适应高度    自适应高度+固定label的高度
6     return [self stringHeightWithString:stu.name
7             fontSize:18 contentSize:CGSizeMake(self.view.frame.size.width - 20,10000)] + 20 + 40;
8 }

 

cell自适应高度
    如果使用纯代码的cell自适应高度,需要在返回tableView高度的方法里面计算一下cell的高度。
    label自适应高度:第一步:numberOfLines = 0;第二步:sizeToFit。前提是label的text不能为空。

1     //设置UILabel的行数   如果为0 则返回任意行
2     self.myLabel.numberOfLines = 0;
3     //自适应高度
4     [self.myLabel  sizeToFit];

 

 

实例代码:(只显示核心部分)

 

viewController.m文件

 

 

tabelViewCell.m文件

 

 详细代码过程(见附录)

 

 

posted @ 2015-09-21 20:11  DengHuiCheng  阅读(360)  评论(0编辑  收藏  举报