博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS-UITableView的两种重用Cell方法的区别(dequeueReusableCellWithIdentifier)
阅读量:2396 次
发布时间:2019-05-10

本文共 2821 字,大约阅读时间需要 9 分钟。

转载自: http://blog.csdn.net/mandmg/article/details/52456862

UITableView中有两种重用Cell的方法:

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;  - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);   
1
2
1
2

在 6中dequeueReusableCellWithIdentifier:dequeueReusableCellWithIdentifier:forIndexPath:所取代。如此一来,在表格视图中创建并添加UITableViewCell对象会变得更为精简而流畅。而且使用

dequeueReusableCellWithIdentifier:forIndexPath:

一定会返回cell,系统在默认没有cell可复用的时候会自动创建一个新的cell出来。

使用 
dequeueReusableCellWithIdentifier:forIndexPath:

的话,必须和下面的两个配套方法配合起来使用:

// Beginning in iOS 6, clients can register a nib or class for each cell.  // If all reuse identifiers are registered, use the newer -dequeueReusableCellWithIdentifier:forIndexPath: to guarantee that a cell instance is returned.  // Instances returned from the new dequeue method will also be properly sized when they are returned.  - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);  - (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);  
1
2
3
4
5
1
2
3
4
5

1、如果是用NIB自定义了一个Cell,那么就调用registerNib:forCellReuseIdentifier:

2、如果是用代码自定义了一个Cell,那么就调用 
registerClass:forCellReuseIdentifier:

以上这两个方法可以在创建UITableView的时候进行调用。

这样在tableView:cellForRowAtIndexPath:方法中就可以省掉下面这些代码:

static NSString *CellIdentifier = @"Cell";  if (cell == nil)       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];   
1
2
3
1
2
3

取而代之的是下面这句代码

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];   
1
1

一、使用NIB 
1、xib中指定cell的Class为自定义cell的类型(不是设置File’s Owner的Class) 
2、调用registerNib:forCellReuseIdentifier:向数据源注册cell

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

3、在tableView:cellForRowAtIndexPath:中使用dequeueReusableCellWithIdentifier:forIndexPath:获取重用的cell,如果没有重用的cell,将自动使用提供的nib文件创建cell并返回(如果使用dequeueReusableCellWithIdentifier:需要判断返回的是否为空)

CustomCell*cell=[_tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath];   
1
1

4、获取cell时如果没有可重用cell,将创建新的cell并调用其中的awakeFromNib方法

二、不使用NIB 
1、重写自定义cell的initWithStyle:withReuseableCellIdentifier:方法进行布局 
2、注册cell

[_tableView registerClass:[CustomCell class] forCellReuseIdentifier:kCellIdentify];    
1
1

3、在tableView:cellForRowAtIndexPath:中使用dequeueReusableCellWithIdentifier:forIndexPath:获取重用的cell,如果没有重用的cell,将自动使用提供的class类创建cell并返回

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

4、获取cell时如果没有可重用的cell,将调用cell中的initWithStyle:withReuseableCellIdentifier:方法创建新的cell

你可能感兴趣的文章
详解-Python-的-“==”-和-“is”
查看>>
Tensorflow-Python-API-翻译(array_ops)
查看>>
Tensorflow-Python-API-翻译(constant_op)
查看>>
Tensorflow-Python-API-翻译(math_ops)(第一部分)
查看>>
论文阅读---An-Artificial-Neural-Network-based-Stock-Trading-System-Using-T
查看>>
A-Paper-A-Day--#1-Convolutional-Sequence-to-Sequence-Learning
查看>>
标记问题:介绍
查看>>
标记问题:生成模型和噪声通道模型
查看>>
利用-TensorFlow-构建卷积神经网络
查看>>
利用TensorFlow实现卷积神经网络做文本分类
查看>>
如何构建高可读性和高可重用的-TensorFlow-模型
查看>>
Ubuntu 安装 pylucene 踩坑还原记,并安装 SmartChineseAnalyzer
查看>>
Java编程思想学习笔记(10)
查看>>
Java编程思想学习笔记(11)
查看>>
机器学习实战:基于Scikit-Learn和TensorFlow—第五章笔记
查看>>
Java编程思想学习笔记(12)
查看>>
Java编程思想学习笔记(13)
查看>>
Java编程思想学习笔记(14)
查看>>
Java-8-UnaryOperator
查看>>
Java-8-Function
查看>>