美文网首页
UITableView(自定义cell)(1)

UITableView(自定义cell)(1)

作者: xdkoo | 来源:发表于2015-07-07 17:49 被阅读217次

    自定义等高cell

    frame方法

    ## 新建一个继承自`UITableViewCell`的子类,比如XMGTgCell
    
    @interface XMGTgCell : UITableViewCell
    @end
    

    在XMGTgCell.m文件中

    • 重写-initWithStyle:reuseIdentifier:方法
      • 在这个方法中添加所有需要显示的子控件
      • 给子控件做一些初始化设置(设置字体、文字颜色等)
    /**
     *  在这个方法中添加所有的子控件
     */
    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
            // ......
        }
        return self;
    }
    
    • 重写-layoutSubviews方法
      • 一定要调用[super layoutSubviews]
      • 在这个方法中计算和设置所有子控件的frame
    /**
     *  在这个方法中计算所有子控件的frame
     */
    - (void)layoutSubviews
    {
        [super layoutSubviews];
    
        // ......
    }
    

    在XMGTgCell.h文件中提供一个模型属性,比如XMGTg模型

    @class XMGTg;
    
    @interface XMGTgCell : UITableViewCell
    /** 团购模型数据 */
    @property (nonatomic, strong) XMGTg *tg;
    @end
    

    在XMGTgCell.m中重写模型属性的set方法

    • 在set方法中给子控件设置模型数据
    - (void)setTg:(XMGTg *)tg
    {
        _tg = tg;
    
        // .......
    }
    

    在控制器中

    • 注册cell的类型
    [self.tableView registerClass:[XMGTgCell class] forCellReuseIdentifier:ID];
    
    • 给cell传递模型数据
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 访问缓存池
        XMGTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 设置数据(传递模型数据)
        cell.tg = self.tgs[indexPath.row];
    
        return cell;
    }
    

    Autolayout方法

    新建一个继承自UITableViewCell的子类,比如XMGTgCell

    @interface XMGTgCell : UITableViewCell
    @end
    

    在XMGTgCell.m文件中

    • 重写-initWithStyle:reuseIdentifier:方法
      • 在这个方法中添加所有需要显示的子控件
      • 给子控件做一些初始化设置(设置字体、文字颜色等)
      • 添加子控件的完整约束
    /**
     *  在这个方法中添加所有的子控件
     */
    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
        if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
            // ......
        }
        return self;
    }
    

    在XMGTgCell.h文件中提供一个模型属性,比如XMGTg模型

    @class XMGTg;
    
    @interface XMGTgCell : UITableViewCell
    /** 团购模型数据 */
    @property (nonatomic, strong) XMGTg *tg;
    @end
    

    在XMGTgCell.m中重写模型属性的set方法

    • 在set方法中给子控件设置模型数据
    - (void)setTg:(XMGTg *)tg
    {
        _tg = tg;
    
        // .......
    }
    

    在控制器中

    • 注册cell的类型
    [self.tableView registerClass:[XMGTgCell class] forCellReuseIdentifier:ID];
    
    • 给cell传递模型数据
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 访问缓存池
        XMGTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 设置数据(传递模型数据)
        cell.tg = self.tgs[indexPath.row];
    
        return cell;
    }
    

    xib

    新建一个继承自UITableViewCell的子类,比如XMGTgCell

    @interface XMGTgCell : UITableViewCell
    @end
    

    新建一个xib文件(文件名最好跟类名一致,比如XMGTgCell.xib)

    • 修改cell的class为XMGTgCell
    Snip20150629_245.png
    • 绑定循环利用标识
    Snip20150629_246.png
    • 添加子控件,设置子控件约束
    Snip20150629_251.png
    • 将子控件连线到类扩展中
    @interface XMGTgCell()
    @property (weak, nonatomic) IBOutlet UIImageView *iconImageView;
    @property (weak, nonatomic) IBOutlet UILabel *titleLabel;
    @property (weak, nonatomic) IBOutlet UILabel *priceLabel;
    @property (weak, nonatomic) IBOutlet UILabel *buyCountLabel;
    @end
    

    在XMGTgCell.h文件中提供一个模型属性,比如XMGTg模型

    @class XMGTg;
    
    @interface XMGTgCell : UITableViewCell
    /** 团购模型数据 */
    @property (nonatomic, strong) XMGTg *tg;
    @end
    

    在XMGTgCell.m中重写模型属性的set方法

    • 在set方法中给子控件设置模型数据
    - (void)setTg:(XMGTg *)tg
    {
        _tg = tg;
    
        // .......
    }
    

    在控制器中

    • 注册xib文件
    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([XMGTgCell class]) bundle:nil] forCellReuseIdentifier:ID];
    
    • 给cell传递模型数据
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 访问缓存池
        XMGTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 设置数据(传递模型数据)
        cell.tg = self.tgs[indexPath.row];
    
        return cell;
    }
    

    storyboard

    新建一个继承自UITableViewCell的子类,比如XMGTgCell

    @interface XMGTgCell : UITableViewCell
    @end
    

    在storyboard文件中,找到UITableView里面的cell(动态cell)

    • 修改cell的class为XMGTgCell
    Snip20150629_245.png
    • 绑定循环利用标识
    Snip20150629_246.png
    • 添加子控件,设置子控件约束
    Snip20150701_88.png
    • 将子控件连线到类扩展中
    @interface XMGTgCell()
    @property (weak, nonatomic) IBOutlet UIImageView *iconImageView;
    @property (weak, nonatomic) IBOutlet UILabel *titleLabel;
    @property (weak, nonatomic) IBOutlet UILabel *priceLabel;
    @property (weak, nonatomic) IBOutlet UILabel *buyCountLabel;
    @end
    

    在XMGTgCell.h文件中提供一个模型属性,比如XMGTg模型

    @class XMGTg;
    
    @interface XMGTgCell : UITableViewCell
    /** 团购模型数据 */
    @property (nonatomic, strong) XMGTg *tg;
    @end
    

    在XMGTgCell.m中重写模型属性的set方法

    • 在set方法中给子控件设置模型数据
    - (void)setTg:(XMGTg *)tg
    {
        _tg = tg;
    
        // .......
    }
    

    在控制器中

    • 给cell传递模型数据
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *ID = @"tg";
        // 访问缓存池
        XMGTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 设置数据(传递模型数据)
        cell.tg = self.tgs[indexPath.row];
    
        return cell;
    }
    

    相关文章

      网友评论

          本文标题:UITableView(自定义cell)(1)

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