自定义UITableViewCell中注册cell及reuseID的使用

关于创建中的注册问题

  • 代码创建
  • 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


    自定义UITableViewCell中注册cell及reuseID的使用_第1张图片
    storyboard中设置reuseID
  • 当然,在storyboard中创建的CustomCell,也是可以关联类并添加方法的,这点和XIB相比也各有优势:
    自定义UITableViewCell中注册cell及reuseID的使用_第2张图片
    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.

参考链接

你可能感兴趣的:(自定义UITableViewCell中注册cell及reuseID的使用)