前言

我们在项目中偶尔需要让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的变量类型的字符代表
# 子类
# 加载
# 是在
# 种方法
# 是一个
# 也有
# 好了
# 本地下载
# 我觉得
# 才是
# 就不
# 则是
# 两种
# 并在
# 第二个
# 要知道
# 重写
# 为例
# 这篇文章
# 不需
相关文章:
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
黑客入侵网站服务器的常见手法有哪些?
建站之星后台管理如何实现高效配置?
济南专业网站制作公司,济南信息工程学校怎么样?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
如何访问已购建站主机并解决登录问题?
如何用PHP工具快速搭建高效网站?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
高端云建站费用究竟需要多少预算?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
如何通过FTP服务器快速搭建网站?
c# 服务器GC和工作站GC的区别和设置
建站之星图片链接生成指南:自助建站与智能设计教程
婚礼视频制作网站,学习*后期制作的网站有哪些?
如何做网站制作流程,*游戏网站怎么搭建?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
小建面朝正北,A点实际方位是否存在偏差?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何配置WinSCP新建站点的密钥验证步骤?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
建站为何优先选择香港服务器?
制作旅游网站html,怎样注册旅游网站?
建站之星展会模版如何一键下载生成?
如何选择域名并搭建高效网站?
python的本地网站制作,如何创建本地站点?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
建站之星如何通过成品分离优化网站效率?
海南网站制作公司有哪些,海口网是哪家的?
css网站制作参考文献有哪些,易聊怎么注册?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
长沙做网站要多少钱,长沙国安网络怎么样?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
宝塔面板如何快速创建新站点?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
,南京靠谱的征婚网站?
如何解决ASP生成WAP建站中文乱码问题?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何零成本快速生成个人自助网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
如何在万网自助建站平台快速创建网站?
建站之星备案流程有哪些注意事项?
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
*请认真填写需求信息,我们会在24小时内与您取得联系。