终于有时间继续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的单元格重用逻辑的更多相关文章

  1. iOS开发——UI_swift篇&UITableView实现单元格展开与隐藏

    UITableView实现单元格展开与隐藏  关于UITableView的展开的收缩在前面的文章我已经结束,就是使用代理,通知,block传值的时候实现的,当时是使用一个Bool值来实现,最后使用着三 ...

  2. iOS开发——Autolayout下动态调整单元格高度

    情景描述: 有时候我们希望更新某一个单元格的数据,通常的做法是使用reloadData方法更新整个单元格.但是对一些情况是不适用的或者说实现起来比较麻烦.比如说这种简单的"点开"一 ...

  3. [Xcode 实际操作]五、使用表格-(11)调整UITableView的单元格顺序

    目录:[Swift]Xcode实际操作 本文将演示如何调整单元格在表格中的位置. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先 ...

  4. [Xcode 实际操作]五、使用表格-(5)设置UITableView的单元格背景颜色

    目录:[Swift]Xcode实际操作 本文将演示单元格背景颜色的设置 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添加两个协 ...

  5. IOS之表视图单元格删除、移动及插入

    1.实现单元格的删除,实现效果如下 - (void)viewDidLoad { [super viewDidLoad]; //设置导航栏 self.editButtonItem.title = @&q ...

  6. UITableView自定义单元格

    随手笔记: RootViewController代码 #import "RootViewController.h" #import "AddressContact.h&q ...

  7. UITableView设置单元格选中后只显示一个打勾的三种简单方法(仅供参考)

    1.第一种方法:先定位到最后一行,若选中最后一行直接退出,否则用递归改变上次选中的状态,重新设置本次选中的状态. - (UITableViewCell*)tableView:(UITableView* ...

  8. UIView加入手势 然后UITableView 加入进这个View 导致UITableView 的单元格点击事件无效

    #import "ViewController.h" @interface ViewController ()<UITableViewDataSource,UITableVi ...

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

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

随机推荐

  1. angular之控制器(0)

    一.控制器的含义 在angularJS中,controlle是一个javascript函数/类,用于操作作用域中,各个对象的初始状态以及相应的行为 二.控制器的作用 1. 控制 AngularJS 应 ...

  2. C语言面试题(一)

       裸辞后,本周开始求职之旅.令人厌烦的是,大多数公司都会通知你去面试,然后拿出一纸试题,开始作答,最后笔试成绩作为重要的参考来决定是否录取你.对于大学四年挂了三年科的我,习惯遇到问题令辟溪径,从不 ...

  3. ExceptionExtensions

    public static class ExceptionExtensions { public static IEnumerable<Exception> GetAllException ...

  4. kd tree学习笔记 (最近邻域查询)

    https://zhuanlan.zhihu.com/p/22557068 http://blog.csdn.net/zhjchengfeng5/article/details/7855241 KD树 ...

  5. do while(false)实用技巧

    今天看项目源码的时候发现有些地方用了do{} while(false)的用法,查了下发现这样确实有些优点,mark下. 1.最重要的优点,用在略微复杂的宏定义中. #define AB1 a; b; ...

  6. [SoapUI] Post请求Body里面限制特殊字符(&、%),Groovy脚本里特殊字符需要添加“\”转义($)。

    SoapUI的Post请求,在body里面不能包含(&.%),如果含有这些特殊字符,请求会报错:在添加的Groovy脚本里有些特殊字符需要使用“\”转义($),不然也会报错.

  7. Android显示基础--单位与尺寸

    px:是像素的意思,屏幕可以显示的最小元素单位,单独一个像素点非常小,肉眼都无法看到. pt:是磅数的意思,1磅等于七十二分之一英寸,pt一般用作字体的单位. dp:密度无关像素的意思,也被称为dip ...

  8. mysql 基础篇1

    1 引入 数据保存到内存: 优点: 1)读写非常快 缺点: 1)程序关闭导致数据丢失 数据保存到文件: 优点: 1)数据可以永久保存 缺点: 1)频繁地IO操作,效率不高! 2)数据管理不方便.例如查 ...

  9. postgresql - 服务配置

    1.查看配置的修改是否需要重启数据库 select name,context from pg_settings where name like 'wal_buffers'; 如果context的值是p ...

  10. Mac环境下 配置Python数据分析环境

    采取的思路主要依据的是这一篇文章,连接: http://www.jb51.net/article/78667.htm 但是当安装brew的时候,可能是网站的问题,一直报错 所以从网上查找资料发现,br ...