转载请注明出处!!!

常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复或者出现内容不显示的情况。这就涉及到重用了。

 1 // 这样配置的话超过页面显示的内容会重复出现
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义唯一标识
5 static NSString *CellIdentifier = @"Cell";
6 // 通过唯一标识创建cell实例
7 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
8 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
9 if (!cell) {
10 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
11 }
12 // 对cell 进行简单地数据配置
13 cell.textLabel.text = @"text";
14 cell.detailTextLabel.text = @"text";
15 cell.imageView.image = [UIImage imageNamed:@"4.png"];
16
17 return cell;
18 }

通过以下3方案可以解决

方案一  取消cell的重用机制,通过indexPath来创建cell 将可以解决重复显示问题 不过这样做相对于大数据来说内存就比较吃紧了

 1 // 方案一  通过不让他重用cell 来解决重复显示
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义唯一标识
5 static NSString *CellIdentifier = @"Cell";
6 // 通过indexPath创建cell实例 每一个cell都是单独的
7 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
8 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
9 if (!cell) {
10 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
11 }
12 // 对cell 进行简单地数据配置
13 cell.textLabel.text = @"text";
14 cell.detailTextLabel.text = @"text";
15 cell.imageView.image = [UIImage imageNamed:@"4.png"];
16
17 return cell;
18 }

方案二  让每个cell都拥有一个对应的标识 这样做也会让cell无法重用 所以也就不会是重复显示了 显示内容比较多时内存占用也是比较多的和方案一类似

 1 // 方案二  同样通过不让他重用cell 来解决重复显示 不同的是每个cell对应一个标识
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义cell标识 每个cell对应一个自己的标识
5 NSString *CellIdentifier = [NSString stringWithFormat:@"cell%ld%ld",indexPath.section,indexPath.row];
6 // 通过不同标识创建cell实例
7 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
8 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
9 if (!cell) {
10 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
11 }
12 // 对cell 进行简单地数据配置
13 cell.textLabel.text = @"text";
14 cell.detailTextLabel.text = @"text";
15 cell.imageView.image = [UIImage imageNamed:@"4.png"];
16
17 return cell;
18 }

方案三 只要最后一个显示的cell内容不为空,然后把它的子视图全部删除,等同于把这个cell单独出来了 然后跟新数据就可以解决重复显示

 1 // 方案三  当页面拉动需要显示新数据的时候,把最后一个cell进行删除 就有可以自定义cell 此方案即可避免重复显示,又重用了cell相对内存管理来说是最好的方案 前两者相对比较消耗内存
2 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
3 {
4 // 定义唯一标识
5 static NSString *CellIdentifier = @"Cell";
6 // 通过唯一标识创建cell实例
7 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
8
9 // 判断为空进行初始化 --(当拉动页面显示超过主页面内容的时候就会重用之前的cell,而不会再次初始化)
10 if (!cell) {
11 cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
12 }
13 else//当页面拉动的时候 当cell存在并且最后一个存在 把它进行删除就出来一个独特的cell我们在进行数据配置即可避免
14 {
15 while ([cell.contentView.subviews lastObject] != nil) {
16 [(UIView *)[cell.contentView.subviews lastObject] removeFromSuperview];
17 }
18 }
19 // 对cell 进行简单地数据配置
20 cell.textLabel.text = @"text";
21 cell.detailTextLabel.text = @"text";
22 cell.imageView.image = [UIImage imageNamed:@"4.png"];
23
24 return cell;
25 }

tableViewCell重用的更多相关文章

  1. IOS之TableViewCell重用机制解决上下刷新重复显示

    首先我是一个经验浅薄的iOS开发人员,这个问题想必许多初学者经常遇到这些问题,在面试中也会经常问到.现在我们一一解决. 首先我们要知道TableViewCell重用机制的原理是什么,我们抽象的理解为古 ...

  2. ios之TableViewCell重用机制避免反复显示问题

    常规配置例如以下 当超过tableView显示的范围的时候 后面显示的内容将会和前面反复 // 这样配置的话超过页面显示的内容会反复出现 - (UITableViewCell *)tableView: ...

  3. 52.tableViewCell重用机制避免重复显示问题

    表刷新超出页面显示的内容会重复出现 -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSInd ...

  4. IOS之TableViewCell重用机制避免重复显示问题

    常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复. 1 // 这样配置的话超过页面显示的内容会重复出现 2 - (UITableViewCell *)tableVi ...

  5. iOS开发之--TableViewCell重用机制避免重复显示问题

    常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复 // 这样配置的话超过页面显示的内容会重复出现 - (UITableViewCell *)tableView:(U ...

  6. iOS 开发之 设计模式【一】原型模式 (Prototype pattern)

    原型模式(Prototype pattern): 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建对象.也可以理解为模板,在创建新对象的时候,按照模板的方法来复制,避免重复造轮子. 简单来 ...

  7. IOS tableViewCell单元格重用中的label重叠的问题

    参考:http://zhidao.baidu.com/link?url=_oMUTo5SxUY6SBaxYLsIpN3i2sZ6SKG35MVlPJd2cNmUf9TGQFkKXX9EXwSwti0n ...

  8. ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用

    做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...

  9. tableview的重用机制(面试必问)

    iphone重用机制是苹果为了实现大量数据显示而采用的一种节省内存的机制,比如在UITableView和ScrollView 等地方.为什么要“可重用”???对于我们的项目来说,内存控制是必不可少的, ...

  10. iOS基础篇(十三)——UITableView(一)重用机制

    UITableView是app开发中常用到的控件,功能很强大,常用于数据的显示.在学习UITableView使用之前,我们先简单了解一下: 1.UITableView的重用机制 UITableView ...

随机推荐

  1. 实现对C语言类学生管理系统文件存储的两种方法

    学习javascript的时候曾经想做一个留言板的应用,但是却由于不知道如何存储失败了,由于做这个留言板的思路类似于C语言的学生管理系统,故此这次经历让我重新审视自己去学懂C语言的文件操作. 我重新用 ...

  2. java--装箱、拆箱、枚举、File类

    增强for循环 增强for循环的作用: 简化迭代器的书写格式.(注意:增强for循环的底层还是使用了迭代器遍历.) 增强for循环的适用范围: 如果是实现了Iterable接口的对象或者是数组对象都可 ...

  3. github使用ssh

    背景 我想使用jekins+github自动化部署,奈何因为墙的原因拉不下来 听闻大佬们说 使用ssh可以破解此问题,所以试一下. 生成本地git证书 1.配置本地git帐户 git config - ...

  4. AI网络搜索

    作为AI应用程序开发人员在了解函数调用(Function Calling)特性调用本地函数时可能注意到列表型参数tools中每一个元素都携带有一个type值.而在大多数函数调用示例程序中,这个type ...

  5. java 文本窗口

    简介 java 文本窗口 code package calcu; import java.awt.BorderLayout; import java.awt.GridLayout; import ja ...

  6. ICEE-SPI-debug最好用 SPI 和 JTAG 或更优的(高达104MHz的)SPI通信保障飞速的debug响应;不再像UART的115200 BaudRate ~

    S25FL032P : 32-Mbit CMOS 3.0 Volt Flash Memory with 104-MHz SPI (Serial Peripheral Interface) Multi ...

  7. SciTech-BigDataAIML-LLM-PE(Positional Encoding)位置编码: Absolute(绝对)Position + Relative(相对)Position + Rotate(旋转)Position

    SciTech-BigDataAIML-LLM PE(Positional Encoding)位置编码: BOW(Bag of Words)词袋模型:丢弃Word位置信息, 只统计Word之间的 Co ...

  8. POLIR-Mind-Nature: Extraverse + Intraverse正循环: Extraverse:真实的{网络+目标客群+利润}: 外界{感知,观察,研究,改变,实践}+ Intraverse:思想{构筑,完善,自我,内心,思想,知识,结构}

    POLIR-Nature-Mind:正能量循环: Intraverse + Extraverse正循环, 不可过度偏向一方. Extraverse: Intraverse:反省.构筑完善自我,内心思想 ...

  9. 雨林木风Win10如何启用虚拟机的问题

    很多雨林木风官网的小伙伴,都知道Win10系统软件内嵌了Hyper-Vvm虚拟机,可是一般来说,这一功能都需要大家一个人去开启开展所使用的.一些客户要想使用这些功能不知道在系统软件哪儿寻找,下面我们来 ...

  10. CSP 失去信心赛

    \(\text{A. twentythree}\) 使最后所有数相等,不难想到差分,那么操作就变成: \[\begin{cases} (0, 1) \rightarrow (1, 0)\\ (1, 1 ...