点击cell勾选

前一段时间重写项目,碰到列表页需要点击cell变为勾选状态,最初的实现思路:
在didSelectRowAt indexPath方法中获取最后一次选中的cell的indexPath进行比较
试了一下效果,正常点击选中都没问题,每当滑动的时候再次点击cell,很惊喜的崩溃了,如图所示:


1111.png

分析原因,获取上一次选中的cell时,创建cell的时候强制解包可选值为nil的时候崩溃了,每当tableView滑动之后,在didSelectRowAtIndexPath方法里调用tableVIew.cellforRow方法创建cell,实际上cell没有值,强制解包导致崩溃,原因为每当tableView滑动之后,上一次选中的cell滑出屏幕以外区域,didSelectRowAtIndexPath方法只能获取当前显示区域内的cell。找到原因之后,切换另一种思路。
在didSelectRowAtIndexPath方法中获取当前选中cell的index值,并刷新

   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if tableView == houseListTableView {
           //用于记录的选中的cell
            self.lastIndex = indexPath.row
        //选中之后刷新数据调用cellforrow方法
        self.houseListTableView.reloadData()
    }

在cellForRow方法里改变选中状态

if self.lastIndex == indexPath.row {
                cell.selectelImageView.image = UIImage(named: "xuanze_on")
                //选中的同时将家庭名称传给按钮的title
                if self.changeHouseNameClosure != nil {
                    self.changeHouseNameClosure!(cell.houseNameLabel.text!)
                }
            }else {
                cell.selectelImageView.image = UIImage(named: "xuanze_off")
            }
}

最终效果如下:


2222.gif

完美的解决了cell选中的问题,选择合适的解决思路事半功倍,节省很多时间。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,533评论 8 265
  • 一、简介 <<UITableView(或简单地说,表视图)的一个实例是用于显示和编辑分层列出的信息的一种手段 <<...
    无邪8阅读 10,663评论 3 3
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 我们畅游在时光的长河中,只能前进,不能后退,只能直行,不能回头。我们挣扎过、顺从过、反抗过,可是从来没有...
    七七帅阅读 214评论 0 3
  • 一直我都幻想自己向内走应该走得比较深了,我努力着,可是我还是那么糊,弄不清楚自己为什么越来越越封闭了,对外在的信任...
    88艳阅读 210评论 0 4