day09-UITableView-10自定义等高的cell-xib方式

UITableView-01基本使用
UITableView-02模型优化
UITableView-03复杂的Plist解析
UITableView-04常见属性和样式
UITableView-05可重复使用Cell-有限的创建新的cell
UITableView-06可重复使用cell-注册方式
UITableView-07索引条(综合小案例)
UITableView-08自定义等高的cell-纯代码frame方式
UITableView-09自定义等高的cell-Masonry方式


UITableViewController-01简单使用


xib方式自定义cell,不需要代码方式创建子控件和子控件的位置和大小.(在xib里面直接设置好,就可以)
需注意:

  1. initWithStyle: reuseIdentifier:此方法是不会调用xib文件得,无法创建xib方式的cell.
    [[XXCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
  2. [registerClass: forCellReuseIdentifier:],注册方式创建cell,其本质还是initWithStyle:...方法.无法调取xib文件.

如何创建xib方式的cell呢?
第一种:

  • 设置cell的可重用标示.


    day09-UITableView-10自定义等高的cell-xib方式_第1张图片
    直接在xib中设置,可重用标示
  • 调用xib文件,创建对应的cell.
    loadNibNamed: owner: options:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //通过可重用标示,去缓存池获取对应cell.
    GroupBuyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"tg"];
    if(cell == nil){
        cell = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([GroupBuyCell class]) owner:nil options:nil] lastObject];
    }
    cell.groupBuy = self.tgData[indexPath.row];
    return cell;
}

第二种:

  • 使用代码注册方式,给xib注册可重用标示.
    registerNib: forCellReuseIdentifier:
  - (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([GroupBuyCell class]) bundle:nil] forCellReuseIdentifier:ID];
  }
  • 缓冲池取对应cell,没有则通过注册方法创建新的cell.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    GroupBuyCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    cell.groupBuy = self.tgData[indexPath.row];
    return cell;
}

不同类型的cell -- 共存
举例: 双十一时,想要做活动,在cell里面插个广告!

day09-UITableView-10自定义等高的cell-xib方式_第2张图片

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.rowHeight =100;
    //两个注册xib可重用标示(2个不同的自定义cell类型)
    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([GroupBuyCell class]) bundle:nil] forCellReuseIdentifier:ID];

    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([TestCell class]) bundle:nil] forCellReuseIdentifier:testID];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.tgData.count+1; // 显示的行 +1.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    if(indexPath.row == 0){ // 插入广告
        TestCell *cell = [tableView dequeueReusableCellWithIdentifier:testID];
        return cell;
    }else{
        GroupBuyCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        cell.groupBuy = self.tgData[indexPath.row-1]; //对应的数据 -1
        return cell;
    }
}

你可能感兴趣的:(day09-UITableView-10自定义等高的cell-xib方式)