说明
该思想来自同事LEAF,我是学习他的,非本人原创。(程序猿应该要尊重别人的成功,因此特写在最前。)
问题
当项目中用到多种UITableViewCell(这实在是太常见了),其表面非常相似,但是又略有区别,属于可以拆分成不同部分的组合的时候,如何设计父类,会让代码更漂亮?
效果如图:
情景可以更多,此处不再一一列举。这些cell高度的相似,很明显都是由不同的组件组合一起的,在iOS中如何实现这样的父类,让不同的cell继承自同一个父类,来让自己的代码变得漂亮呢?
我们公司的解法
struct闪亮登场 :struct (C programming language) - Wikipedia
第一步:
抽象:将cell抽象成四个部分,分别是Top,Content,Title,Footer,其中四个组件的样式又各有不同的组合,且各个组件本身可能存在,也可能不存在。
废话不多说,直接上代码。
1. 不同部分组合(共四部分,可以配置成不同的组合,甚至可以使用 "|" 操作。):
第二步:
组装:使用结构体来组装我们需要的cell样式。
1. 大招大招,构造struct(构造一个结构体,来组装当前cell的各个部分):
2. 代码实现:
第三步:
配置:配置初始样式。
1. 初始化基本样式,项目使用VFL布局,其中的imageContentRatio以及customerContentRatio是用来根据不同的UI调整内容的高度,子类可以重写)
2. 正式组装,根据结构体组装UITableViewCell:
第四步:
使用:是骡子是马,拉出来溜溜!
1. 新建UITableViewCell继承自该父类,只需要实现一个方法:(即可以实现一个没有top,中间是一个大图UIImageView,接下来是一个自定义的UIView,然后就是标题简介,最后就是一个带评论等信息的Footer,是不是很cool?)
2. 更多调整,还可以实现以下方法,在子类中去调整cell不同部分所占的高度,Very easy,right ?
写在最后
由于暂时没有时间整理完整demo,稍后会在贴上github的demo链接,有关本案例中牵涉到的如何使用VFL计算UITableViewCell高度等内容,会在之后章节中分享,并期待大家分享你们的更好的解决方案。
PS:该实现思路来自于同项目组的同事LEAF,在此对他表示感谢