cell复用本来是件好事,有时不想要cell复用,比如遇到的下面的两种情况就需要取消cell重用
1. cell里有动画效果的时候,上下滑动cell时,再次出现动画效果。我们只想要第一次展示cell有动画效果
动画效果比如有:单个进度条、绘制图表路径动画效果
2. 在问题回访或者问卷调查列表有单选时,滑动列表新的cell的单选选项由于复用cell,
已经被选中(新的选项我们还没选中)
网上很多取消cell复用的方法,在tableview代理方法里(
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
),比如:
一、给定不同的cell复用ID
二、cell重新初始化
三、cell视图从superView移除
要么行不通(tableview代理方法奔溃,代码走不过去),
要么没效果。
我们换种思路:cell还是继续复用,但用数据源(数据模型或者cell全局bool属性)控制效果
一 、 针对第一种纯展示的cell里的动画(进度条效果,绘图路径动画)重复的情况:
我们只需在cell里面加一个bool值属性比如haveLoad,默认为false。当动画加载时,
判断这个bool值为false进行动画效果,动画效果完成后将haveLoad设为true。
若动画加载时判断bool值为true时直接为动画后的样式。
之前OC语言的部分参考示例:
二、真对第二种cell情况,比第一种稍微多一步。列表单选选项问题,
cell中单选按钮已选中原样(选中是、否的状态和原来一致)
核心方法还是一样,对于单选为是、否的两种选项,可以用2个bool值属性对应是否两个选项的状态,
但这样麻烦,普适性不佳,要是选项四五个就不合适。所以是用一个整型int变量属性来区分。默认值为0,
选项四五种时依次类推)这种需要收集选项状态的数据,
可以将这个整型int变量放到列表数组内的数据模型里,方便记录选中状态和下一步。
2.cell提供一个公有方法(这个方法在tableview代理方法时调用这个cell公有方法),方法内根据整型int变量的值,恢复选项选中的状态。
swift语言部分代码参考示例,此整型变量是存放到数据模型里的