iOS基础知识

UITbaleView注册cell的两种方式

2020-04-12  本文已影响0人  鄂北

最近由独立开发转为合作开发了,发现在tableview注册cell时我和队友有些不一样,查了些资料在这里记录下。

一注册自定义cell

在tableview初始化时注册cell,注册cell时有两种方式,这两种方式是取决于你cell是使用xib创建的还是纯代码创建。
1.注册使用纯代码创建的cell

    [self.tableview registerClass:[CustomTableViewCell class] forCellReuseIdentifier:@"cell"];

2.注册使用xib创建的cell

    [self.tableview registerNib:[UINib nibWithNibName:@"CustomTableViewCell" bundle:nil] forCellReuseIdentifier:@"cell"];

二调用cell

在调用cell时也有两种方式

方法一:dequeueReusableCellWithIdentifier:(NSString *)identifier
这种方式需要判断cell是否为nil,如已经在初始化tableview时已经注册了cell就不需要if里的代码了。
1.纯代码创建的cell

    CustomTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    // 这种方式需要判断cell是否为nil,如已经在初始化tableview时已经注册了cell就不需要下面这代码了
    if (cell == nil) {
        // 如果用纯代码创建的cell
        cell = [[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

2.xib创建的cell

    CustomTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    // 这种方式需要判断cell是否为nil,如已经在初始化tableview时已经注册了cell就不需要下面这代码了
    if (cell == nil) {
        // 如果是xib创建的cell
        cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil] firstObject];
    }

方法二:dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath

    CustomTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

这种方式就不需要再去判断cell是否为nil了,但是这种方式就必需要注册cell,否则会报错。方法一不一定要注册cell,但是如果没有先注册cell,就需要在加载cell时判断cell是否为nil,如果为nil就需要再注册cell。

上一篇下一篇

猜你喜欢

热点阅读