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。