美文网首页
day09-UITableView-10自定义等高的cell-x

day09-UITableView-10自定义等高的cell-x

作者: js_huh | 来源:发表于2019-11-14 08:48 被阅读0次

    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的可重用标示.


      直接在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里面插个广告!

    - (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-x

          本文链接:https://www.haomeiwen.com/subject/deqfictx.html