自定义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、调用 ...
  • banana_416432275
  • banana_416432275
  • 2015年03月22日 11:27
  • 18945

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

自定义UITableViewCell大致有两类方法: 使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)    ...
  • zhaojian3513012
  • zhaojian3513012
  • 2015年09月06日 16:07
  • 244

自定义UITableViewCell(registerNib: 与 registerClass: 的差异)

自定义UITableViewCell大致有两类方法:  使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)  ...
  • clj_is_queen1
  • clj_is_queen1
  • 2017年08月24日 14:51
  • 70

自定义UITableViewCell(registerNib: 与 registerClass: 的使用)

自定义UITableViewCell大致有两类方法: (1)使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)  2、调用...
  • u013346305
  • u013346305
  • 2015年11月10日 14:46
  • 264

TableView 注册 registerNib 和registerClass区别

使用第二种方式从复用队列创建Cell 1.如果cell  定制用xib 定制 第一步 注册AppCell  的xib 文件 //注册要复用的AppCe...
  • mingenlong
  • mingenlong
  • 2015年08月11日 17:42
  • 1046

ios UITableViewCell(registerNib: 与 registerClass: 的区别)

自定义UITableViewCell大致有两类方法:  使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)  ...
  • souprock
  • souprock
  • 2017年04月27日 14:29
  • 157

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

自定义UITableViewCell大致有两类方法: 使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)    ...
  • zhongbeida_xue
  • zhongbeida_xue
  • 2016年05月31日 10:48
  • 553

UICollectionView UITableView registerNib和registerClass的回调

//从nib加载 [deviceContainer registerNib:[UINib nibWithNibName:@"Cell" bundle:nil] forCellWithReuseIden...
  • mikejaps
  • mikejaps
  • 2015年11月18日 17:25
  • 474

registerNib: 与 registerClass: 的区别

自定义UITableViewCell大致有两类方法: 使用nib  1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class)    ...
  • u010100106
  • u010100106
  • 2015年12月09日 13:38
  • 233

Cell自定义registerNib:与registerClass:

一、使用Nib registerNib:  forCellReuseIdentifier:方法向数据源注册cell [self.table registerNib:[UINib nibWithNibN...
  • MinggeQingchun
  • MinggeQingchun
  • 2017年07月05日 15:13
  • 201
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义UITableViewCell(registerNib: 与 registerClass: 的区别)
举报原因:
原因补充:

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