iOS下UITableView的单元格重用逻辑
终于有时间继续UITableView的接口调用顺序这篇文章了,之前测试过,模拟器都是按照height,cellForRow这样的顺序调用接口的,iOS8以前一直是这样,但是到了iOS8,这个顺序倒过来了这样倒是有好处,至少按照传统思路,单元格先创建,创建完成后就知道高度了.但这样怎么向下兼容呢,来试试这个粗略的办法.
在cellForRow,heightForRow两个接口中都调用一个函数,来创建单元格,但是要根据系统版本做判断区分
-(H5TableCell*)tableView:(UITableView *)tableView makeCellForRowAtIndexPath:(NSIndexPath *)indexPath mode:(BOOL)isOnCellCreate
{
NSString* cellItemStyleNameStr = [self getCellStyle:indexPath];
UIView* contentView = nil;
H5TableCell *cell = nil;
if ((isOnCellCreate && ISIOS8) || (!isOnCellCreate && ISIOS7 && !ISIOS8))
{
cell =[tableView dequeueReusableCellWithIdentifier:cellItemStyleNameStr];
if (cell==nil)
{
cell=[[H5TableCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellItemStyleNameStr];
contentView = [self tableView:tableView viewForRowAtIndexPath:indexPath];
[cell.contentView addSubview:contentView];
cell.contentView.frame = CGRectMake(, , contentView.frame.size.width, contentView.frame.size.height);
}
else
{
NSUInteger idx = [cellArray indexOfObject:cell];
if (NSNotFound != idx)
{
NSIndexPath* reusedIndexPath = cell.IndexPath;
//KCLog(@"复用%ld.%ld for %ld.%ld",reusedIndexPath.section,reusedIndexPath.row,indexPath.section,indexPath.row); //清除H5Core库登记的对该被复用indexPath单元的view登记
NSString* windowKey = [NSString stringWithFormat:@"%@_%ld_%ld",
cellItemStyleNameStr,
(long)reusedIndexPath.section,
(long)reusedIndexPath.row];
//[[H5Core shareInstance] destroyH5CoreWindow:windowKey];
[self.delegate destructionWindowName:windowKey];
[cellArray removeObject:cell];
[cellIdArray removeObjectAtIndex:idx];
}
else
{
KCLog(@"复用 未找到 for %ld.%ld",indexPath.section,indexPath.row);
}
}
cell.IndexPath = indexPath;
cell.delegate = self;
cell.selectionStyle=UITableViewCellSelectionStyleNone;
cell.backgroundColor=[UIColor clearColor];
[cellArray addObject:cell];
[cellIdArray addObject:indexPath];
}
else
{
//只是获取cell,因为已经创建过了
NSUInteger idx = [cellIdArray indexOfObject:indexPath];
if (NSNotFound != idx)
{
cell = [cellArray objectAtIndex:idx];
}
else
{
KCLog(@"非复用 未找到 for %ld.%ld",indexPath.section,indexPath.row);
} } return cell;
}
目前没有发现有复用未找到的情况.
iOS下UITableView的单元格重用逻辑的更多相关文章
- iOS开发——UI_swift篇&UITableView实现单元格展开与隐藏
UITableView实现单元格展开与隐藏 关于UITableView的展开的收缩在前面的文章我已经结束,就是使用代理,通知,block传值的时候实现的,当时是使用一个Bool值来实现,最后使用着三 ...
- iOS开发——Autolayout下动态调整单元格高度
情景描述: 有时候我们希望更新某一个单元格的数据,通常的做法是使用reloadData方法更新整个单元格.但是对一些情况是不适用的或者说实现起来比较麻烦.比如说这种简单的"点开"一 ...
- [Xcode 实际操作]五、使用表格-(11)调整UITableView的单元格顺序
目录:[Swift]Xcode实际操作 本文将演示如何调整单元格在表格中的位置. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先 ...
- [Xcode 实际操作]五、使用表格-(5)设置UITableView的单元格背景颜色
目录:[Swift]Xcode实际操作 本文将演示单元格背景颜色的设置 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添加两个协 ...
- IOS之表视图单元格删除、移动及插入
1.实现单元格的删除,实现效果如下 - (void)viewDidLoad { [super viewDidLoad]; //设置导航栏 self.editButtonItem.title = @&q ...
- UITableView自定义单元格
随手笔记: RootViewController代码 #import "RootViewController.h" #import "AddressContact.h&q ...
- UITableView设置单元格选中后只显示一个打勾的三种简单方法(仅供参考)
1.第一种方法:先定位到最后一行,若选中最后一行直接退出,否则用递归改变上次选中的状态,重新设置本次选中的状态. - (UITableViewCell*)tableView:(UITableView* ...
- UIView加入手势 然后UITableView 加入进这个View 导致UITableView 的单元格点击事件无效
#import "ViewController.h" @interface ViewController ()<UITableViewDataSource,UITableVi ...
- IOS tableViewCell单元格重用中的label重叠的问题
参考:http://zhidao.baidu.com/link?url=_oMUTo5SxUY6SBaxYLsIpN3i2sZ6SKG35MVlPJd2cNmUf9TGQFkKXX9EXwSwti0n ...
随机推荐
- Number To Indian Rupee Words in Oracle Forms / Reports
Convert numbers to Indian Rupees format in Oracle Forms / Reports.Create the below mention function ...
- [poj1200]Crazy Search(hash)
Crazy Search Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26713 Accepted: 7449 Descrip ...
- C语言细节——献给入门者(三)
C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...
- socket详解(一)《转》
在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器 ...
- Deep Learning 10_深度学习UFLDL教程:Convolution and Pooling_exercise(斯坦福大学深度学习教程)
前言 理论知识:UFLDL教程和http://www.cnblogs.com/tornadomeet/archive/2013/04/09/3009830.html 实验环境:win7, matlab ...
- mybatis 模糊查询 like
1. 参数中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <sel ...
- python核心编程第六章练习6-12
6-12.字符串.(a)创建一个名字为findchr()的函数,函数声明如下.def findchr(string, char)findchr()要在字符串string中查找字符char,找到就返回该 ...
- python窗体——pyqt初体验
连续两周留作业要写ftp的作业,从第一周就想实现一个窗体版本的,但是时间实在太短,qt零基础选手表示压力很大,幸好又延长了一周时间,所以也就有了今天这篇文章...只是为了介绍一些速成的方法,还有初学者 ...
- jquery iframe自适应高度[转]
经典代码 iFrame 自适应高度,在IE6/IE7/IE8/Firefox/Opera/Chrome/Safari通过测试. 很古老的方法: <iframe src="../In ...
- JavaWeb基础: XML基础知识
简介 XML:可扩展标记语言,W3C指定的用于描述结构化数据的语言,XML在实际开发中,经常用作软件的配置文件,以描述程序模块之间的依赖和组合关系. XML约束:XML常常用于软件配置管理,对于软件框 ...