自定义uitableviewcell时,registerNib与registerClass的区别(转载)

自定义UITableViewCell一般有两种办法:

(1)、使用xib

1.xib中的cell指定class为自定义的class

2.调用 tableView 的 registerNib:forCellReuseIdentifier:方法向数据源注册cell

3.在cellForRowAtIndexPath中使用dequeueReuseableCellWithIdentifier:forIndexPath:获取重用的cell,若无重用的cell,将自动使用所提供的nib文件创建cell并返回(若使用旧式dequeueReuseableCellWithIdentifier:方法需要判断返回是否为空而进行新建)

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

(2)、不使用xib

1、重写自定义cell的initWithStyle:withReuseableCellIdentifier:方法进行布局

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

3、在cellForRowAtIndexPath中使用dequeueReuseableCellWithIdentifier:forIndexPath:获取重用的cell,若无重用的cell,将自动使用所提供的class类创建cell并返回

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可省略空值判断的步骤。

转自:http://www.lrdup.net/archives/1032

时间: 2024-08-05 23:06:18

自定义uitableviewcell时,registerNib与registerClass的区别(转载)的相关文章

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

自定义UITableViewCell大致有两类方法:<一>使用nib 1.xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 2.调用 tableView 的 registerNib:forCellReuseIdentifier:方法向数据源注册cell 复制代码 [_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellR

自定义UITableViewCell时, 使用autoLayout, 无法很好的做到屏幕适配

解决方法: 重写cell的setFrame方法即可 - (void)setFrame:(CGRect)frame { frame.size.width = self.window.frame.size.width; [super setFrame:frame]; }

自定义UITableViewCell大致有两类方法

<一>使用nib 1.xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 2.调用 tableView 的 registerNib:forCellReuseIdentifier:方法向数据源注册cell 复制代码 [_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellReuseIdentifier:kCellIdenti

用xib自定义UITableViewCell

1.文件结构: 2. 先创建一个xib文件,删除原有的view,添加一个TableViewCell控件. 3.ModelTableViewController.m文件 1 #import "ModelTableViewController.h" 2 #import "Cell.h" 3 4 5 @interface ModelTableViewController () 6 7 @end 8 9 @implementation ModelTableViewContr

用xib自定义UITableViewCell的注意事项——重用

问题的提出: 有时候我们经常需要自定义tableView的cell,当cell里面的布局较为复杂时往往舍弃纯代码的方式而改用xib的方式进行自定义.当我们用纯代码的方式布局cell时,往往会在cell的initWithStyle: reuseIdentifier: 方法里面用纯代码进行布局,然后在外部VC的cellForRowAtIndexPath方法里面我们会这么写,假定自定义的cell为Cell,继承自UITableViewCell: static NSString *CellIdentif

用xib自定义UITableViewCell的注意事项——重用问题

问题的提出: 有时候我们经常需要自定义tableView的cell,当cell里面的布局较为复杂时往往舍弃纯代码的方式而改用xib的方式进行自定义.当我们用纯代码的方式布局cell时,往往会在cell的initWithStyle: reuseIdentifier: 方法里面用纯代码进行布局,然后在外部VC的cellForRowAtIndexPath方法里面我们会这么写,假定自定义的cell为Cell,继承自UITableViewCell: static NSString *CellIdentif

自定义UITableViewCell:Cell高度、分割线、间距等

UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格. 通常,UITableView中的Cell是 动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightForRowAtIndexPath:返回 值),以及屏幕高度计算屏幕中可显示几个cell.而进行自定义TableViewCell无非是采用代码实现或采用IB编辑nib文件来实现两种方式, 本文主要收集代码的方式实现各种cell自定义. 如何动态调整Cell

转:自定义UITableViewCell:Cell高度、分割线、间距等

UITableView的强大更多程度上来自于可以任意自定义UITableViewCell单元格. 通常,UITableView中的Cell是 动态的,在使用过程中,会创建一个Cell池,根据每个cell的高度(即tableView:heightForRowAtIndexPath:返回 值),以及屏幕高度计算屏幕中可显示几个cell.而进行自定义TableViewCell无非是采用代码实现或采用IB编辑nib文件来实现两种方式, 本文主要收集代码的方式实现各种cell自定义. 如何动态调整Cell

114自定义 UITableViewCell(扩展知识:如何使用xib创建自定义的表格视图单元格 KMTableViewCell)

关键操作: 效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UITableViewController 4 @property (strong, nonatomic) NSMutableArray *mArrDataList; 5 @property (strong, nonatomic) NSMutableArray *mArrImageList; 6 7 @end ViewCo