UITableView的cell重用优化
三种情况,四种方法:
情况一:加载xib中描述的cell
情况二:加载纯代码自定义的cell
情况三:加载storyBoard中的tableView内的cell
针对于情况一:
// 导入自定义cell的.h文件,在viewDidLoad方法中注册xib中描述的cell,因为只需要注册一次,所以选择在viewDidLoad方法中注册
#import "WSUserCell.h" - (void)viewDidLoad { [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([WSUserCell class]) bundle:nil] forCellReuseIdentifier:WSUserCellId]; }
针对于情况二:
// 方法一: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"carID";
UITableViewCell *carCell = [tableView dequeueReusableCellWithIdentifier:ID];
if (carCell == nil) {
carCell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
} WSCarGroups *carGroup = self.arrayModel[indexPath.section];
WSCars *car = carGroup.cars[indexPath.row]; carCell.textLabel.text = car.carName;
carCell.imageView.image = [UIImage imageNamed:car.carIcon]; return carCell;
}
// 方法二: - (void)viewDidLoad {
// 注册
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"carID";
UITableViewCell *carCell = [tableView dequeueReusableCellWithIdentifier:ID];
// 因为已经注册过这个cell类,所以就不用写这句代码
// if (carCell == nil) {
// carCell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
// } WSCarGroups *carGroup = self.arrayModel[indexPath.section];
WSCars *car = carGroup.cars[indexPath.row]; carCell.textLabel.text = car.carName;
carCell.imageView.image = [UIImage imageNamed:car.carIcon];
return carCell;
}
针对于情况三:
即不需要注册,也不需要在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中判断cell是否为空,系统会自动加载storyBoard中指定reuseIdentifier的cell
- (void)viewDidLoad {
[super viewDidLoad]; self.tableView.rowHeight = ;
// 千万不要注册,因为注册的优先级大于storyBoard,一旦注册就不会加载storyBoard中的cell
// [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"tg"];
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row % == ) {
static NSString *ID = @"tg";
XMGTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; cell.tg = self.tgs[indexPath.row]; return cell;
} else {
return [tableView dequeueReusableCellWithIdentifier:@"test"];
}
}
如下图,为storyBoard中给cell绑定的reuseIdentifier:
UITableView的cell重用优化的更多相关文章
- iOS - UITableView中Cell重用机制导致Cell内容出错的解决办法
"UITableView" iOS开发中重量级的控件之一;在日常开发中我们大多数会选择自定Cell来满足自己开发中的需求, 但是有些时候Cell也是可以不自定义的(比如某一个简单的 ...
- 解决UITableView中Cell重用机制导致内容出错的方法总结
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...
- ios UITableView中Cell重用机制导致内容重复解决方法
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...
- iOS开发之UITableView及cell重用
1.UITanleview有的两种风格 一种是Plain,一种是Grouped,可以从这里设置风格: 他们样式分别如下: Plain: Grouped: 2.tableView展示数据的过程: (1) ...
- iOS解决UITableView中Cell重用带来的问题
tableView的常规配置,当超出一屏的cell就会标上可重用的标识出列到可重用缓存池中,后面再根据可重用标识来到的可重的cell就会和前面显示同样内容. - (UITableViewCell *) ...
- UITableView中的cell的优化
1.cell的重用 所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据I ...
- UI:UITableView 编辑、cell重用机制
tableView编辑.tableView移动.UITableViewController tableView的编辑:cell的添加.删除. 使⽤场景: 删除⼀个下载好的视频,删除联系⼈: 插⼊⼀条新 ...
- 使用Autolayout实现UITableView的Cell动态布局和高度动态改变
本文翻译自:stackoverflow 有人在stackoverflow上问了一个问题: 1 如何在UITableViewCell中使用Autolayout来实现Cell的内容和子视图自动计算行高,并 ...
- 解决Cell重用内容混乱的几种简单方法,有些方法会增加内存
重用实现分析 查看UITableView头文件,会找到NSMutableArray* visiableCells,和NSMutableDictnery* reusableTableCells两个结构 ...
随机推荐
- android系统架构解析
以上是我在这个课题下的一些参考博客或者网页链接.里面有对于android架构的一些较好的分析理解,接下来是楼主在阅读后自己的一些整理. Android采用层次化系统架构,官方公布的标准架构如下图所示. ...
- 排序及重复元素去重的说明,TreeSet,HashSet
先看下面一段代码: package 类集; import java.util.Set; import java.util.TreeSet; class Person{ private String n ...
- background-origin 设置背景图片原始起始位置
- centos7 安装拼音输入法(转载)
http://m.blog.csdn.net/article/details?id=52137523
- 在C#中将String转换成Enum:
一: 在C#中将String转换成Enum: object Enum.Parse(System.Type enumType, string value, bool ignoreCase); 所以,我 ...
- VS2013使用EF6与mysql数据库
您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧 在vs2013中使用mysql连接entityFramework经常会遇到这个问题 ...
- 前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
话说以前JQuery刚出来的时候,真的是对个人的冲击蛮大的.记得当时我买的第一本书就是<锋利的JQuery>,藉由这本书开始,我从此以后的项目基本用上了JQuery,其给我带来的便利性是不 ...
- 【传递智慧】C++基础班公开课第六期培训
11月11日 二 213 进程间关系和守护进程 11月12日 三 213 信号 11月13日 四 11月14日 五 213 线程(创建,销毁,回收) 11月15日 六 213 线程同步机制 1 ...
- Apache Shiro 使用手册(一)Shiro架构介绍 - kdboy - ITeye技术网站
转载 原文地址 http://kdboy.iteye.com/blog/1154644 一.什么是Shiro Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理 ...
- java中String、StringBuffer、StringBuilder的区别
java中String.StringBuffer.StringBuilder是编程中经常使用的字符串类,他们之间的区别也是经常在面试中会问到的问题.现在总结一下,看看他们的不同与相同. 1.可变与不可 ...