自定义UITableViewCell中注册cell及reuseI
关于创建中的注册问题
- 代码创建
- storyboard中直接创建
- 通过XIB进行nib创建
几种创建方式都需要添加一个静态字符串作为reuseID
NSString * const SecCustCell = @"SecCustCell";
tips:
自定义cell时,记得将其他内容加到self.contentView 上,而不是直接添加到 cell 本身上
---代码创建---
在ViewDidLoad
中,注册一个reuseID:
[self.tableView registerClass:[CustomTableViewCell class]
forCellReuseIdentifier:SecCustCell];
---storyboard创建---
-
在storyboard中直接创建,并需要填写reuseID.如下图。在这个过程其实已经注册了reuseID
storyboard中设置reuseID - 当然,在storyboard中创建的
CustomCell
,也是可以关联类并添加方法的,这点和XIB相比也各有优势:
storyboard中自定义cell同样可以拖曳事件 -
在这种情况下,
viewdidload
中切忌再写上[self.tableview registerClass...]的字眼,这样会造成注册了两个reuseID,当调用的时候取的就不是storyboard的内容了,会造成看不到我们绘制的CustomCell
---XIB创建---
不用多说,是另外新建一个XIB绘制好相应的CustomCell
然后嵌入到当前viewcontroller的storyboard或XIB.
但是注册必须通过 registerNib来实现
[self.tableView registerNib:[UINib nibWithNibName:@"Template1Cell" bundle:nil] forCellReuseIdentifier:kTemplate1CellID];
总结一:
自定义cell时,
- 若使用nib,使用 registerNib: 注册,dequeue时会调用 cell 的
-(void)awakeFromNib
- 代码创建,使用 registerClass: 注册, dequeue时会调用 cell 的
- (id)initWithStyle:withReuseableCellIdentifier:
- 使用storyboard,在绘制的时候就已注册,不能再另外调用registerClass,否则创建的cell会不显示
自定义UITableViewCell的调用
- 使用
dequeueReuseableCellWithIdentifier:
可不注册,但是必须对获取回来的cell进行判断是否为空,若空则手动创建新的cell;
If you registered a class for the specified identifier and a new cell must be created, this method initializes the cell by calling its initWithStyle:reuseIdentifier: method. For nib-based cells, this method loads the cell object from the provided nib file. If an existing cell was available for reuse, this method calls the cell’s prepareForReuse method instead.
- 使用dequeueReuseableCellWithIdentifier:forIndexPath:必须注册,但返回的cell可省略空值判断的步骤。
You must register a class or nib file using the registerClass:forCellWithReuseIdentifier: or registerNib:forCellWithReuseIdentifier: method before calling this method.