自定义UITableViewCell(registerNib: 与 registerClass: 的区别)

转载 2016年05月30日 12:16:24

自定义UITableViewCell(registerNib: 与 registerClass: 的区别)


自定义UITableViewCell大致有两类方法: 
<一>使用nib 
1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 


2、调用 tableView 的 registerNib:forCellReuseIdentifier:方法向数据源注册cell 
[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. [_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellReuseIdentifier:kCellIdentify];  


3、在cellForRowAtIndexPath中使用dequeueReuseableCellWithIdentifier:forIndexPath:获取重用的cell,若无重用的cell,将自动使用所提供的nib文件创建cell并返回(若使用旧式dequeueReuseableCellWithIdentifier:方法需要判断返回是否为空而进行新建)
[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. xxxxxCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];  

4、获取cell时若无可重用cell,将创建新的cell并调用其中的awakeFromNib方法,可通过重写这个方法添加更多页面内容



<二>不使用nib 
1、重写自定义cell的initWithStyle:withReuseableCellIdentifier:方法进行布局 

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier  
  2. {  
  3.     self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];  
  4.     if (self)  
  5.     {  
  6.         // cell页面布局  
  7.         [self setupView];  
  8.     }  
  9.     return self;  
  10. }  



2、为tableView注册cell,使用registerClass:forCellReuseIdentifier:方法注册(注意是Class) 

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. [_tableView registerClass:[xxxxxCell class] forCellReuseIdentifier:kCellIdentify];  

3、在cellForRowAtIndexPath中使用dequeueReuseableCellWithIdentifier:forIndexPath:获取重用的cell,若无重用的cell,将自动使用所提供的class类创建cell并返回 
[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. xxxxxCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];  


4、获取cell时若无可重用cell,将调用cell中的initWithStyle:withReuseableCellIdentifier:方法创建新的cell


另外要注意的:
1、dequeueReuseableCellWithIdentifier:与dequeueReuseableCellWithIdentifier:forIndexPath:的区别:
前者不必向tableView注册cell的Identifier,但需要判断获取的cell是否为nil;
后者则必须向table注册cell,可省略判断获取的cell是否为空,因为无可复用cell时runtime将使用注册时提供的资源去新建一个cell并返回

2、自定义cell时,记得将其他内容加到self.contentView 上,而不是直接添加到 cell 本身上

总结:
1.自定义cell时,
若使用nib,使用 registerNib: 注册,dequeue时会调用 cell 的 -(void)awakeFromNib
不使用nib,使用 registerClass: 注册, dequeue时会调用 cell 的 - (id)initWithStyle:withReuseableCellIdentifier:
2.需不需要注册?
使用dequeueReuseableCellWithIdentifier:可不注册,但是必须对获取回来的cell进行判断是否为空,若空则手动创建新的cell;
使用dequeueReuseableCellWithIdentifier:forIndexPath:必须注册,但返回的cell可省略空值判断的步骤。

相关文章推荐

自定义UITableViewCell(registerNib: 与 registerClass: 的区别)

自定义UITableViewCell大致有两类方法:  使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)  2、调用 ...

UITableView的registerClass forCellReuseIdentifier用法详解

转载自:  http://www.zpluz.com/thread-3504-1-1.html tableView: cellForRowAtIndexPath:方法中有两个获得重用cell...

ios 中registerClass的作用

ios 中registerClass使用注意事项: iOS中registerClass 什么时候需要写,什么时候不需要写? ios6之后API发生了变化,ios6之前完全不用写,ios6之后根据情况...

UITableView的registerClass forCellReuseIdentifier用法详解

tableView: cellForRowAtIndexPath:方法中有两个获得重用cell的方法 UITableViewCell *cell = [tableView dequeueReusab...

自定义UITableViewCell(registerNib: 与 registerClass: 的区别

自定义UITableViewCell大致有两类方法: 使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)    ...

自定义UITableViewCell(registerNib: 与 registerClass: 的区别)

自定义UITableViewCell(registerNib: 与 registerClass: 的区别)    自定义UITableViewCell大致有两类方法: 使用...
  • lxlzy
  • lxlzy
  • 2016年03月14日 17:12
  • 190

iOS、UITableViewCell、自定义

  • 2016年02月18日 17:38
  • 9.85MB
  • 下载

自定义UITableViewCell

  • 2013年11月08日 14:51
  • 399KB
  • 下载

uitableviewcell编辑模式自定义左边的图片按钮

首先我们先看一下今天要做的一个效果图: 我们要实现编辑模式,cell向右移动,展现出删除按钮。 在网上找了好久,没找到解决方法,网上都是修改多选模式下的图片,理论其实无非就是便利底层cell,...

xib和手写代码自定义UITableViewCell

  • 2015年06月03日 11:45
  • 33KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义UITableViewCell(registerNib: 与 registerClass: 的区别)
举报原因:
原因补充:

(最多只允许输入30个字)