关于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吧!
以前的时候,是用的:
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吧!
相关文章推荐
- JDK1.8中 接口成员变量和成员方法
- Log4j学习笔记
- URLSession
- 阅读信号方面的知识
- Android开发总结笔记 ListView(列表视图[下]) 1-3-3
- AlertDialog的单选按钮对话框
- LeetCode OJ:Compare Version Numbers(比较版本字符串)
- cocos2dx项目打包apk(一)
- #在蓝懿学习iOS的日子#Day11
- [C++] OOP
- 面试基础题
- 素数筛
- 帖子回复解决方案—说—无限级分类
- 搭建高性能web服务
- jQuery学习实例:瀑布流布局
- React Native
- 类之间的覆盖问题
- DevExpress的NavBarControl组件中NavBarGroup如何触发展开或者折叠事件(点击事件)?
- 光栅化三维场景的基本流程
- 程序员学习交流的网站论坛