标签:
自定义cell
1.通过xib
1>一定要注意在xib的cell中设置重用标识(reuse identifier)
2>封装的步骤
*换继承,重新拖TableView,然后实现数据源方法
*新建xib描述cell的样子---DealCell.xib并把cell的高度设置为80,然后拖控件
*新建UITableViewCell的子类---DealCell(用来封装xib内部的所有东西)
*将xib中Cell的Class改为DealCell
*在DealCell中拥有xib中的所有子控件(声明属性,进行连线)
*每一条团购都有一大堆数据,所以每一条团购都需要一个模型,故新建模型Deal,封装这些数据(因为只有属性,所以继承自NSObject),在Deal.h中声明每一条cell的5个属性(其中一个是BOOL类型)
*给DealCell增加Deal模型属性,Cell的子控件显示什么数据取决于这个模型属性里面的数据
@property (nonatomic,strong)Deal *deal;
*在DealCell.m中导入Deal.h并重写setDeal:方法,在这个方法中根据模型数据设置cell内部子控件的属性
-(void)setDeal:(Deal *)deal
{
_deal = deal;
//1.标题
_titleLabel.text = deal.title;
//2.购买人数
_buyLabel.text = [NSString stirngWithFormat:@"购买:%d",dela.buy];
//3.价格
_priceLabel.text = [NSString stirngWithFormat:@"价格:%d",dela.price];
//4.图片
_iconView.image = [UIImage imageNamed:deal.icon];
//5.是否显示最新
_dealNewView.hidden = !deal.isNew;
}
*在DealCell中创建一个类方法快速返回一个xib创建好的cell对象,这样创建cell只需要调用这个类方法即可
+(id)dealCell
{
return [[NSBundle mainBundle] loadNibNamed:@”DealCell“ owner:nil options:nil][0];
}
创建完之后再调用set方法传数据,即可。
*给xib中的cell添加一个重用标识deal
然后在DealCell中创建一个类方法ID返回标识,设置标识时直接调用这个类方法即可
然后再创建一个方法cellHeight返回cell的高度。(这样控制器就不用改代码了,只负责调用这个方法。要改直接在方法里改。)
*在控制器实现文件中导入Deal.h和DealCell.h
在类扩展中声明一个数组成员变量_deals
在ViewDidLoad中
Deal *d1 = ....
_deals = @[d1,。。。。];
并实现数据源方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _deals.count;
]
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//1.缓存池取出cell
DealCell *cell = [tableView dequeueReusableCellWithIdentifier:[DealCell ID]];
//2.缓存池没有则重新创建
if(cell == nil){
cell = [DealCell dealCell];
}
//3.传递模型
cell.deal = _deals[indexPath.row];
return cell;
}
3>使用cell
*设置每一行cell的高度
*利用重用标识去缓存池取得cell
*如果缓存池没有cell,创建cell
*传递模型给cell
标签:
原文地址:http://www.cnblogs.com/marshall-yin/p/4695898.html