全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

iOS如何让tableview支持不同种类的cell详解

前言

我们在项目中偶尔需要让tableview里支持不同种类的cell,比如微博的原创微博和别人转发的微博,就是两种cell。又或是类似支付宝的的timeline也有各种类型的cell。在同一个tableview里实现不同种类的cell,一般有两种方法,一种是把所有种类的cell先注册了,再根据不同的identifer去加载cell,一种是在init时创建不同的identifer的cell。

效果图如下:


准备工作

创建一个基类的CDZBaseCell,基类cell拥有一些共用的属性和方法,如持有model,解析model。

创建不同的子类cell,以两个子类CDZTypeACell CDZTypeBCell 为例,继承自CDZBaseCell,重写一些方法,如高度,显示视图等等。

Datasource中准备好判断index所在的cell种类的方法(如根据model的type属性等)

- (Class)cellClassAtIndexPath:(NSIndexPath *)indexPath{
 CDZTableviewItem *item = [self itemAtIndexPath:indexPath];
 switch (item.type) {
  case typeA:{
   return [CDZTypeACell class];
  }
   break;
  case typeB:{
   return [CDZTypeBCell class];
  }
   break;
 }
}

- (CDZTableviewItem *)itemAtIndexPath:(NSIndexPath *)indexPath{
 return self.itemsArray[indexPath.row];
}

- (NSString *)cellIdentiferAtIndexPath:(NSIndexPath *)indexPath{
 return NSStringFromClass([self cellClassAtIndexPath:indexPath]);
}

方法一:先注册,根据identifer去加载不同的cell

先在tableview创建时注册需要的不同种类,再判断index对应的种类,再根据identifer加载子类cell。

[self.tableview registerClass:[CDZTypeACell class] forCellReuseIdentifier:NSStringFromClass([CDZTypeBCell class])];
[self.tableView registerClass:[CDZTypeBCell class] forCellReuseIdentifier:NSStringFromClass([CDZTypeBCell class])];

并在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中根据重用标识加载cell。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 CDZBaseCell *cell = [tableView dequeueReusableCellWithIdentifier:[self cellIdentiferAtIndexPath:indexPath] forIndexPath:indexPath];
 cell.item = [self itemAtIndexPath:indexPath];
 return cell;
}

方法二:在init时创建不同identifer的cell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中判断cell是否为nil,并根据index所在cell的种类初始化cell和其identifer。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 CDZBaseCell *cell = [tableView dequeueReusableCellWithIdentifier:[self cellIdentiferAtIndexPath:indexPath]];
 if (!cell) {
  Class cls = [self cellClassAtIndexPath:indexPath];
  cell = [[cls alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[self cellIdentiferAtIndexPath:indexPath]];
 }
 cell.item = [self itemAtIndexPath:indexPath];
 return cell;
}

源码下载

所有源码和Demo(本地下载)

总结

个人更喜欢第二种,苹果官方文档也推荐第二种方法去重用cell。我觉得优点是一个是在tableview划分MVC架构时,tableview创建时不需要知道cell的类型,而只需要知道datasouce,而datasource才是需要去分配cell类型的。第二个是tableviewcell的初始化方法并非只能用initWithStyle(collectionview必须先注册的原因则在于初始化方法只有initWithFrame)。而使用了注册,则是在复用池空时默认调用initWithStyle的方法,如果需要用别的方法初始化就不可以了。第一种方法可以用在有一些库需要先注册后才能调用的,比如自动计算cell高度的库FDTemplateLayoutCell。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# ios  # tableviewcell  # 自定义tableviewcell  # cell嵌套tableview  # iOS触摸事件UITouch应用详解  # iOS二维码的生成代码  # IOS中的target action控件的实现  # iOS获取某个日期后n个月的日期  # iOS实现支持小数的星星评分组件实例代码  # React Native第三方平台分享的实例(Android  # IOS双平台)  # IOS 开发之ObjectiveC的变量类型的字符代表  # 子类  # 加载  # 是在  # 种方法  # 是一个  # 也有  # 好了  # 本地下载  # 我觉得  # 才是  # 就不  # 则是  # 两种  # 并在  # 第二个  # 要知道  # 重写  # 为例  # 这篇文章  # 不需 


相关文章: 网站制作大概要多少钱一个,做一个平台网站大概多少钱?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  建站之星如何快速解决建站难题?  如何用AWS免费套餐快速搭建高效网站?  如何通过西部数码建站助手快速创建专业网站?  如何选择域名并搭建高效网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何在Ubuntu系统下快速搭建WordPress个人网站?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  如何通过远程VPS快速搭建个人网站?  如何用已有域名快速搭建网站?  如何通过虚拟主机空间快速建站?  C++时间戳转换成日期时间的步骤和示例代码  如何选择PHP开源工具快速搭建网站?  微信推文制作网站有哪些,怎么做微信推文,急?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  建站之星展会模版如何一键下载生成?  建站之星如何开启自定义404页面避免用户流失?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  php json中文编码为null的解决办法  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  nginx修改上传文件大小限制的方法  如何在IIS中新建站点并配置端口与物理路径?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  如何在Windows 2008云服务器安全搭建网站?  网站制作员失业,怎样查看自己网站的注册者?  ,怎么在广州志愿者网站注册?  如何快速辨别茅台真假?关键步骤解析  定制建站价位费用解析与套餐推荐全攻略  如何彻底删除建站之星生成的Banner?  定制建站哪家更专业可靠?推荐榜单揭晓  香港服务器WordPress建站指南:SEO优化与高效部署策略  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  建站之星图片链接生成指南:自助建站与智能设计教程  建站之星2.7模板快速切换与批量管理功能操作指南  企业微网站怎么做,公司网站和公众号有什么区别?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  移民网站制作流程,怎么看加拿大移民官网?  建站之星微信建站一键生成小程序+多端营销系统  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  如何用低价快速搭建高质量网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站主机与虚拟主机有何区别?如何选择最优方案?  高防服务器租用如何选择配置与防御等级?  Python路径拼接规范_跨平台处理说明【指导】  C++用Dijkstra(迪杰斯特拉)算法求最短路径  ,网页ppt怎么弄成自己的ppt?  孙琪峥织梦建站教程如何优化数据库安全? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。