关于cell的重用标识符的问题

记得是在iOS6之前,是没有用注册的,现在用注册方法,貌似让我们省去了许多麻烦

以前的时候,是用的:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"重用标识符"];

if (cell == nil){

cell = [[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleValue2) reuseIdentifier:@"标识符"];

}

那么,它和现在的register有什么区别呢?

区别在于,以前的写法取出重用的cell可能是空的,需要我们去手动判断操作,而后来的写法,如果取出的重用cell为空的话,register会告诉它去创建一个什么样的cell ! 在某些情况下,如果使用了自定义的cell 没有去给它注册的话,它会崩溃!所以说,register一般情况是真对的自定义的cell而言的!


而register有两种情况,一个是nib注册的,一个是Class注册的情况.

在Xib或者storyboard(特殊情况除外)中,会指定cell的Class为自定义的类型,然后在控制器(controller)中,调用tabView的registerNib:forCellReuseIdentifier: 方法,向数据源注册cell

然后在 cellForRowIndexPath 的方法中,用 dequeueReusableCellWithIdentifier:forIndexPath: 来获取重用的cell, 如果没有重用的cell,它就会自动使用所提供的Nib文件创建cell,并返回. 而且在创建新的cell的同时,会调用 -(void)awakeFromNib方法,我们就可以通过重写这个方法来添加更多页面内容了


如果使用的是 registerClass,在cell没有可以重用的cell的事后将会调用cell中的 initWithStyle:withReusableCellIdentifier: 方法 创建新的 cell


所以,在使用dequeueReusableCellWithIdentifier: 的时候,必须手动的去判断是否cell为空,若为空就创建新的cell;

而在使用

dequeueReusableCellWithIdentifier: forIndexPath: 的时候,就必须要去注册,如果不注册,则会崩溃!但返回的cell可省略空值判断的步骤!


###  在注册中cell的方法中,UINib 为做可视图的, 而Class 是做代码的,所以,如果你的自定义cell是用代码敲出来的, 就用Class , 如果是控件拖出来的,就用UINib吧!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值