iOS UITableViewCell 注册与重用

1 创建UITableView设置相关属性时注册

// xib cell注册
[tableView registerNib:[UINib nibWithNibName:NSStringFromClass([UITableViewCell class]) bundle:nil] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];

// 纯代码 cell注册
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];

如果先注册了,那么tableView调用数据源方法tableView:cellForRowAtIndexPath:时就不用再注册,直接可以使用dequeueReusableCellWithIdentifier:forIndexPath:就会重用,其实我实验过用dequeueReusableCellWithIdentifier也是会重用的,但还是建议用前者,因为后者一般配合在tableView:cellForRowAtIndexPath:方法里面注册使用。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class]) forIndexPath:indexPath];
    return cell;
}

2 在数据源方法里面注册(适用于未能提前知道Identifier,如从接口获取的Identifier)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];
    // xib的cell注册
    if(cell == nil)
    {
        cell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([UITableViewCell class]) owner:self options:nil] firstObject];
    }
    // 纯代码的cell注册
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([UITableViewCell class])];
    }
    return cell;
}

3 直接在xib cell里面注册

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class]) forIndexPath:indexPath];
    NSLog(@"地址-----%p 第%ld行",cell, indexPath.row + 1);
    return cell;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容