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语言的部分参考示例:

ios 设置cell不复用 ios tableview关闭cell复用_ios 设置cell不复用

   

二、真对第二种cell情况,比第一种稍微多一步。列表单选选项问题,

cell中单选按钮已选中原样(选中是、否的状态和原来一致)

核心方法还是一样,对于单选为是、否的两种选项,可以用2个bool值属性对应是否两个选项的状态,

   但这样麻烦,普适性不佳,要是选项四五个就不合适。所以是用一个整型int变量属性来区分。默认值为0,

选项四五种时依次类推)这种需要收集选项状态的数据,

   可以将这个整型int变量放到列表数组内的数据模型里,方便记录选中状态和下一步。

        2.cell提供一个公有方法(这个方法在tableview代理方法时调用这个cell公有方法),方法内根据整型int变量的值,恢复选项选中的状态。

      


    swift语言部分代码参考示例,此整型变量是存放到数据模型里的

ios 设置cell不复用 ios tableview关闭cell复用_单选_02