美文网首页TableView
UITableViewCell的四种复用的方法

UITableViewCell的四种复用的方法

作者: mkb2 | 来源:发表于2016-10-27 16:06 被阅读153次

在实际的开发过程中,我们总要去复用cell,最好自定义cell,然后注册,那么今天来总结一下cell复用的四种方法,两个是纯代码,两个是用nib复用

图1.所有的效果都是这样的,经过测试,都是有复用
//第一中cell的复用标识
static  NSString* firseCellid = @"firseCell";
//第2中cell的复用标识
static  NSString* secCellid = @"secCellid";
//第3中cell的复用标识
static  NSString* threeCellid = @"threeCellid";
//第4中cell的复用标识
static  NSString* fourCellid = @"fourCellid";

方法一,使用纯代码,在控制器中使用registerClass注册cell

//1.使用tableview注册cell,“registerClass”专门注册纯代码cell的
- (void)viewDidLoad {
    [super viewDidLoad];
    //注册firseCell
    [self.tableView registerClass:[SEFirstCell class] forCellReuseIdentifier:firseCellid];
}


//2.在数据源方法中,直接“dequeueReusableCellWithIdentifier”,获取到复用的cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    SEFirstCell *cell = [tableView dequeueReusableCellWithIdentifier:firseCellid];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];
    NSLog(@"%@",cell);
    return cell;
}

方法2,使用纯代码,在cell中调用方法initWithStyle: reuseIdentifier:];设置重用标识符(推荐)

//1.SESecCell.h文件中,添加一个类方法
+ (instancetype)secCellWithTableView:(UITableView *)tableView;
//2.SESecCell.m文件中,开始处理这个类方法,在cell中调用方法`initWithStyle: reuseIdentifier:];`设置重用标识符
+ (instancetype)secCellWithTableView:(UITableView *)tableView{
    SESecCell *cell = [tableView dequeueReusableCellWithIdentifier:secCellid];
    if (!cell) {
        cell = [[SESecCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:secCellid];
    }
    return cell;
}
//在控制器中,调用cell的时候,直接使用类方法就好,非常的方便
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    SESecCell *cell = [SESecCell secCellWithTableView:tableView];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];
    return cell;
}

方法3,使用xib,在控制器中使用registerNib注册cell

图2.先写一个nib,设置一下重用标识
//1.使用tableview注册nib,记得使用重用标识
- (void)viewDidLoad {
    [super viewDidLoad];
    //注册threeCell
    [self.tableView registerNib:[UINib nibWithNibName:@"SEThreeCell" bundle:nil] forCellReuseIdentifier:threeCellid];
}


//2.在数据源方法中,直接“dequeueReusableCellWithIdentifier”,获取到复用的cell(和方法一相同)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    SEThreeCell *cell = [tableView dequeueReusableCellWithIdentifier:threeCellid];
    cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];
        NSLog(@"%@",cell);
    return cell;
}

方法4,使用nib,在cell方法中直接注册nib (推荐)

//1.先写一个类方法
#import <UIKit/UIKit.h>
@interface SEFourCell : UITableViewCell
+ (instancetype)fourCellWithTableView:(UITableView *)tableView;
@end
//2.将这个方法重写一下,加载和注册nib
+ (instancetype)fourCellWithTableView:(UITableView *)tableView{
    UINib *nib = [UINib nibWithNibName:@"SEFourCell" bundle:nil];
    [tableView registerNib:nib forCellReuseIdentifier:fourCellid];
    SEFourCell *fourCell = [[nib instantiateWithOwner: nib options:nil] lastObject];
    return fourCell;
}
//3.直接使用,已经复用了~
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        SEFourCell *cell = [SEFourCell fourCellWithTableView:tableView];
        cell.textLabel.text = [NSString stringWithFormat:@"%ld",indexPath.row];
        NSLog(@"%@",cell);
        return cell;
}

刚才我测试了一下,就是使用nib的时候,图2中设置了identifier的标记,这个写不写都行,因为在代码中已经有了

相关文章

网友评论

  • Kris_A:整理的真好真细致,
    mkb2:@抨击者 非常感谢~

本文标题:UITableViewCell的四种复用的方法

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