标签:
自定义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