UITabelView 高级(自定义Cell)
自定义一个Cell
当我们要显示复杂数据的时候,例如要做一个扣扣聊天界面,或是新闻列表,系统的行已经不能满足我们的要求,这个时候我们可以通过自定义这个行,让他显示更多复杂结构的样式。
自定义cell就是创建一个UITabelViewCell的子类,把cell上的控件创建都封装在子类中,简化UIViewController中的代码然后把子视图控件添加到cell的contentView上
cell中的控件如何显示model中的信息
cell中声明一个model类型的属性,viewController中获取到Model对象后赋值给cell的Model属性
cell中重写Model的setter方法,把Model对象中的内容重新赋值给各个控件
M和V不直接进行通信,C负责M和V之间进行通信
多种类型的CELL混合
开发中常见多种类型的cell混合在一个tableView中使用,通常每种类型的cell有不同的布局样式
通常我们会在tabelView:cellForRowAtIndexPath:方法中根据不同的Model来决定使用什么类型的cell
每种类型的cell要定义不同的重用标识符,cell重用的时候会根据重用标识符从重用队列中取用哪种类型的cell
例如我们定义一个ComposeCel类型的标识符和ReceivedCell类型的标识符
然后通过判断并根据不同的标识符从重用队列中取用不同类型的表格
cell自适应高度
之前我们使用的cell一直都是同样的高度,或者某行固定高度,但在实际开发中,经常要让cell根据Model中文本的长短动态的更改高度。
首先获取文本的高度
计算文本高度是所用的字体要和label显示时所用的字体一致
label的宽度要和计算时使用的限定宽度一致,这样才能保证文本显示在label中时,label高度恰巧够
tableView:heightForRowAtIndexPath:方法要比tableView:cellForRowAtIndexPath 先执行,所以要提前计算好每行cell需要多少高度