您的位置:首页 > 其它

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

2015-11-04 20:45 218 查看
记得是在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吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: