自定义单元格的两种方式:
1、使用nib
2、不使用nib
1、使用nib方式创建单元格
在awakeFromNib 方法中add视图到cell的contentview中,使得单元格符合需求。
2、不使用nib创建单元格
复写cell的-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier方法,在里面添加视图到单元格的content view上。
前方高能,重点来了,请注意:
在创建tableview的时候会面临一个问题,那就是到底要不要向数据源注册单元格:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//dequeueReusableCellWithIdentifier: 该方法可以不注册单元格,但是必须判断是否有可以重用的单元格,如果没有,则需要手动创建cell
TableViewCell1 *cell = [tableView dequeueReusableCellWithIdentifier:@"tableviewcell"];
if (cell == nil) {
cell = [[TableViewCell1 alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"tableviewcell"];
}
//dequeueReusableCellWithIdentifier:forIndexPath: 这个方法必须注册单元格,
如果不是使用nib创建,在创建tableview 的时候则需要[_tableView registerClass:[TableViewCell1 class] forCellReuseIdentifier:@"cell1"]来注册;
如果是使用nib方式来创建的cell,则需要调用[_tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"cell"]来注册;
//这个方法不需要判断是否有可以重用的单元格,没有可以重用的cell 也不用手动创建cell,系统会自动创建,如果是用nib方式,则会自动调用awakeformnib方法来创建,不是用nib方式,则会自动调用initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier方法
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
return cell;
}
需不需要注册关键是看调用了那个方法。