关于UICollectionViewCell的问题

以下代码作用是一个collection view的cell上的控件的设置,初始化后,第一个cell上的控件为橙色,其他为灰色,点击其他cell,选中则为橙色,其他为灰色。

但是这时候出问题了,因为初始化后,第一个橙色的cell实际上并不是因为选中才为橙色的,其默认仍为未选中状态,所以此时点击其他cell,第一个cell的状态实质上并没有改变,故而第一个cell并不能变为灰色(即它不会走select属性)

override func awakeFromNib() {

        if newsTypeCellStartindex == 0{

            self.newsType.textColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)

            self.selectLine.backgroundColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)

        } else {

            self.newsType.textColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)

            self.selectLine.backgroundColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)

        }

        newsTypeCellStartindex += 1

    }

    

    override var selected: Bool{

        didSet{

            if selected {

                self.newsType.textColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)

                self.selectLine.backgroundColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)

            } else {

                self.newsType.textColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)

                self.selectLine.backgroundColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)

            }

        }

    }


解决方法:

在collection的代理方法里

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {

        for cell in collectionView.visibleCells() {

            cell.selected = false

        }

        

        let cell = collectionView.cellForItemAtIndexPath(indexPath)

        cell!.selected = true

    }

作用是,因为cell复用,所以遍历可见cell,即等于遍历了所有的cell,把cell的选中状态置成false,使所有cell强制走select属性,使其改变颜色,然后最后再去把当前选中的cell的select属性改成true,这样就可以达到只有选中的那个是橙色了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值