zoukankan      html  css  js  c++  java
  • UITableView定义等高的cell

    1 纯代码方式

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

    @interface XMGTgCell : UITableViewCell
    @end
    

    在XMGTgCell.m文件中

    • 重写-initWithStyle:reuseIdentifier:方法
      • 在这个方法中添加所有需要显示的子控件
      • 给子控件做一些初始化设置(设置字体、文字颜色等)
      • (或者使用masonry框架,在这个方法中设置位置,而不需要在layoutSubviews函数中设置位置了,这种叫做autolayout方式)。
    /**
     *  在这个方法中添加所有的子控件
     */
    - (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;
    
        // .......
    }
    

    定义模型block

    定义模型的时候,可以将模型所做的事情也同时定义在模型中,用一个block来存储。

    #import <Foundation/Foundation.h>
    
    //block
    typedef void (^rowBaseSelected)();
    
    @interface rowBase : NSObject
    
    /**image*/
    @property (nonatomic, copy) NSString  *icon;
    /**text*/
    @property (nonatomic, copy) NSString  *title;
    /**block*/
    @property (nonatomic, copy) rowBaseSelected  rowBaseSelected;
    
    +(instancetype)initWithIcon:(NSString *)icon title:(NSString *)title;
    
    @end
    

    这样在需要的地方,可以设置模型的操作

    row1.rowBaseSelected = ^(){
            OneController *oneController = [[OneController alloc]init];
            [self.navigationController pushViewController:oneController animated:YES];
        };
    

    在需要执行的地方

    if (rowBase.rowBaseSelected) {
            rowBase.rowBaseSelected();
        }
    

    经验

    给cell一个快速的创建方法

    + (instancetype)cellWithTableView:(UITableView *)tableView
    {
        static NSString *ID = @"setting";
        YLSettingCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        if (cell == nil) {
            cell = [[YLSettingCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
        }
        return cell;
    }
    

    其中:

    cell = [[YLSettingCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    

    这一句代码中,要想实现多态的使用(假如当前cell有多个子类,创建的时候方便),要改成这样

    cell = [[self alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    

    在控制器中

    • 注册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;
    }
    

    2 xib方式

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

    @interface XMGTgCell : UITableViewCell
    @end
    

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

    • 修改cell的class为XMGTgCell

    • 绑定循环利用标识

    • 添加子控件,设置子控件约束

    • 将子控件连线到类扩展中
    @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;
    }
    

    3 storyBoard方式

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

    @interface XMGTgCell : UITableViewCell
    @end
    

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

    • 修改cell的class为XMGTgCell

    • 绑定循环利用标识

    • 添加子控件,设置子控件约束

    • 将子控件连线到类扩展中
    @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;
    }
    
  • 相关阅读:
    jQuery中$.proxy()的原理和使用
    JS中各种宽度、高度、位置、距离总结
    js中得call()方法和apply()方法的用法
    google浏览器翻译失败解决方案
    js区分移动设备与PC
    知识积累
    Django
    leetcode 27.Remove Element
    leetcode 28. Implement strStr()
    21. Merge Two Sorted Lists
  • 原文地址:https://www.cnblogs.com/66it/p/5107932.html
Copyright © 2011-2022 走看看