终于有时间继续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. CentOS 7安装Mysql并设置开机自启动

    CentOS 7不带Mysql数据库了,默认的数据库是MariaDB(Mysql的一个分支). 可以按照以下步骤手动安装Mysql数据库. 1. 下载rpm安装文件 wget http://repo. ...

  2. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序创建更复杂的数据模型

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第六篇:为ASP.NET MVC应用程序 ...

  3. excel如何设置输入数字后单元格自动填充颜色

    在使用excel的过程中,有时需要在输入数字时,突出显示这些单元格,突出显示可以用有填充颜色的单元格来表示.为了实现这样的效果,需要借助excel的条件格式. 工具/原料 电脑 Excel 2010 ...

  4. mac 显示set a breakpoint in malloc_error_break to debug 终端显示进程已完成怎么办?

    mac 终端显示 ,0x7fff73dbd300) malloc: *** error for object 0x7fce52d15100: pointer being freed was not a ...

  5. java高薪之路__001_类

    Java中内部类分四种:成员内部类.局部内部类.静态内部类和匿名内部类.要注意静态内部类的调用方式与其他不同,采用的是类似调用类中的静态属性.静态方法的方式 Multi Level 调用不同类中的相同 ...

  6. javascript事件之:谈谈自定义事件

    对于JavaScript自定义事件,印象最深刻的是用jQuery在做图片懒加载的时候.给需要懒加载的图片定义一个appear事件.当页面图片开始出现时候,触发这个自定义的appear事件(注意,这里只 ...

  7. unittest可能面临的问题以及解决方法

    问题1:用例的执行顺序 当使用unittest.main()时,用例的执行是按照ascall值的顺序来执行的,所以如果使用main()方法来执行用例的话,那么就需要通过命名来限制执行顺序,比如想要先执 ...

  8. ​'JAVAC' 不是内部或外部命令解决方法,记得要重启cmd

    我们在配置完环境变量后,在命令提示框中输入javac命令时,往往会提示javac不是内部或者外部命令时怎么办呢?我们一起来解决它吧! 我们配置完java环境变量之后,在命令行输入javac按下回车键, ...

  9. __VA_ARGS__可变参数宏

    #define qWiFiDebug(format, ...) qDebug("[WiFi] "format" File:%s, Line:%d, Function:%s ...

  10. iframe 根据加载内容调整高度

    iframe标签代码 <iframe id="checkListFrame" name="checkListFrame"    src="Ind ...