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 @end
14
15 @implementation YYStatusCell
16
17 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
18 {
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)setupDetailView
34 {
35 YYStatusDetailView *detailView=[[YYStatusDetailView alloc]init];
36 [self.contentView addSubview:detailView];
37 self.detailView=detailView;
38 }
39
40 /**添加工具条*/
41 -(void)setupToolbar
42 {
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 @end
14 @implementation YYStatusDetailView
15
16 - (id)initWithFrame:(CGRect)frame
17 {
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)setupOriginalView
32 {
33 YYStatusOriginalView *OriginalView = [[YYStatusOriginalView alloc]init];
34 [self addSubview:OriginalView];
35 self.OriginalView=OriginalView;
36
37 }
38 /**添加转发微博*/
39 -(void)setupRetweetedView
40 {
41 YYStatusRetweetedView *retweetedView = [[YYStatusRetweetedView alloc]init];
42 [self addSubview:retweetedView];
43 self.retweetedView=retweetedView;
44 }
45 @end

浙公网安备 33010602011771号