首页 > 代码库 > iOS开发项目篇—40搭建cell的基本结构

iOS开发项目篇—40搭建cell的基本结构

iOS开发项目篇—40搭建cell的基本结构

一、简单说明

1.策略:针对微博可能出现的多种情况(只有文字,有文字有配图,有转发微博等),一次性加载所用的子控件到cell中,对于没有数据的空间进行隐藏。(不管cell以后会显示什么子控件,把所有有可能显示的子控件都添加上去·添加到contentView上)

微博cell的显示示例:

2.自定义cell的步骤:

1.新建一个继承自UITablecell的子类
2.在initWithStyle:方法中进行子控件的初始化
(1)将有可能显示的所有子控件都添加到contentView中
(2)顺便设置子控件的一些属性(一次性的设置:字体,文字颜色,背景等)
 
3.提供两个模型
(1)一个是数据模型(文字数据+图片数据)
(2)一个是frame模型(数据模型+所有子控件的frame+cell的高度)
 
4.cell应该提供一个frame模型属性
(1)将frame模型传递给cell
(2)cell根据frame模型给子控件设置frame,根据数据模型给子控件设置数据
(3)cell根据数据模型决定显示和隐藏哪些子控件
 
5.在tableView的代理方法中返回cell的高度

 

二、cell的结构分析

提示:如果在调整的事后需要“统一行动”的子控件,可以考虑先把他们作为一个群组添加到一个view中进行管理。不要吝啬UI控件,控件是不占内存的,图片占内存。

只有工具条和微博具体内容这两个View是直接面向contentView的

 

三、新建类,对类进行顶层设计

自定义cell类,其继承自UITableViewcell

整体结构:

类中的代码设计:

 YYStatusCell.m文件

 1 // 2 //  YYStatusCell.m 3 //  34-微博搭建cell的基本结构 4 //  自定义cell 5  6 #import "YYStatusCell.h" 7 #import "YYStatusDetailView.h" 8 #import "YYStatusToolbar.h" 9 10 @interface YYStatusCell ()11 @property(nonatomic,weak)YYStatusDetailView *detailView;12 @property(nonatomic,weak)YYStatusToolbar *toolbar;13 @end14 15 @implementation YYStatusCell16 17 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier18 {19     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];20     if (self) {21         //初始化子控件22         23         //1.添加微博具体内容24         [self setupDetailView];25         26         //2.添加工具条27         [self setupToolbar];28     }29     return self;30 }31 32 /**添加微博具体内容*/33 -(void)setupDetailView34 {35     YYStatusDetailView *detailView=[[YYStatusDetailView alloc]init];36     [self.contentView addSubview:detailView];37     self.detailView=detailView;38 }39 40 /**添加工具条*/41 -(void)setupToolbar42 {43     YYStatusToolbar *toolbar=[[YYStatusToolbar alloc]init];44     [self.contentView addSubview:toolbar];45     self.toolbar=toolbar;46 }47 48 @end

YYStatusDetailView.m文件

 1 // 2 //  YYStatusDetailView.m 3 //  34-微博搭建cell的基本结构 4 // 5  6 #import "YYStatusDetailView.h" 7 #import "YYStatusOriginalView.h" 8 #import "YYStatusRetweetedView.h" 9 10 @interface YYStatusDetailView ()11 @property(nonatomic,weak)YYStatusOriginalView *OriginalView;12 @property(nonatomic,weak)YYStatusRetweetedView *retweetedView;13 @end14 @implementation YYStatusDetailView15 16 - (id)initWithFrame:(CGRect)frame17 {18     self = [super initWithFrame:frame];19     if (self) {20         //初始化子控件21         22         //1.添加原创微博23         [self setupOriginalView];24         25         //2.添加转发微博26         [self setupRetweetedView];27     }28     return self;29 }30 /**添加原创微博*/31 -(void)setupOriginalView32 {33     YYStatusOriginalView *OriginalView = [[YYStatusOriginalView alloc]init];34     [self addSubview:OriginalView];35     self.OriginalView=OriginalView;36     37 }38 /**添加转发微博*/ 39 -(void)setupRetweetedView40 {41     YYStatusRetweetedView *retweetedView = [[YYStatusRetweetedView alloc]init];42     [self addSubview:retweetedView];43     self.retweetedView=retweetedView;44 }45 @end