registerNib: 与 registerClass: 的区别

来源:互联网 发布:史记的地位 知乎 编辑:程序博客网 时间:2024/04/30 16:50


自定义UITableViewCell大致有两类方法:

<一>使用nib 

1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 


pastedGraphic.png 


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


[_tableView registerNib:[UINib nibWithNibName:@"xxxxxCell" bundle:nil] forCellReuseIdentifier:kCellIdentify]; 



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


xxxxxCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath]; 



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



<二>不使用nib 

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


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 

if (self) 

// cell页面布局 

[self setupView]; 

return self; 



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


[_tableView registerClass:[xxxxxCell class] forCellReuseIdentifier:kCellIdentify]; 



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



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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果老师喜欢自己怎么办 孩子不思进取逃避学习怎么办 老师拿孩子泄愤怎么办 老师对小孩不好怎么办 孩子被老师骂怎么办 孩子幼儿园被打怎么办 两个家长吵架老师怎么办 家长和老师矛盾怎么办 孩子特别害怕老师怎么办? 老师排挤孤立孩子怎么办 很害怕一件事怎么办 高中老师误会我怎么办 家长讹老师老师怎么办 小孩子老说头疼怎么办 孩子总是否定自己怎么办 孩子总是否定别人怎么办 老师屏蔽家长该怎么办 初二学生学疲劳怎么办 孩子不愿补英语怎么办 培训班孩子不学怎么办 小孩不想去学校怎么办 讨厌父母的性格怎么办 老师揪孩子耳朵怎么办 老师整天骂孩子怎么办 教师被学生骂怎么办 幼儿园学生骂老师怎么办 学生骂老师外号怎么办 小孩上课很多嘴怎么办 学生老玩手机怎么办 和校长有了矛盾怎么办 家长打了我怎么办 小朋友不想去幼儿园怎么办 小朋友不想上幼儿园怎么办 高中老师打学生家长怎么办 老师偏心学生该怎么办? 老师能打孩子怎么办 有的幼儿打老师怎么办? 孩子特别怕老师怎么办 孩子跟老师认生怎么办 和搭班老师不合怎么办 学生厌学了老师怎么办