UICollectionViewCell 在选择时不改变颜色

Posted

技术标签:

【中文标题】UICollectionViewCell 在选择时不改变颜色【英文标题】:UICollectionViewCell not changing colors on select 【发布时间】:2017-05-27 18:20:53 【问题描述】:

我正在尝试创建一个 collectionView,用户可以在其中选择多个单元格,并让他们突出显示/取消选择它们。我似乎无法弄清楚如何在点击单元格时更改它们的背景颜色。

这里是我设置collectionview的地方:

let extraCollectionView = UIView()
 let flowLayout = UICollectionViewFlowLayout()

        extraCollectionView.frame = CGRect(x:self.view.frame.size.width * 1.5, y:self.view.frame.size.height / 6.5, width: self.view.frame.width / 1.3, height: self.view.frame.height / 1.35)


        extraCollectionView.backgroundColor = UIColor.clear
        self.view.addSubview(extraCollectionView)


        let collectionView = UICollectionView(frame: CGRect(x: extraCollectionView.frame.width * 0, y:extraCollectionView.frame.height * 0, width: extraCollectionView.frame.width, height: extraCollectionView.frame.height), collectionViewLayout: flowLayout)


        collectionView.register(uploadGenreSelectionCVC.self, forCellWithReuseIdentifier: cellId)
        collectionView.delegate = self
        collectionView.dataSource = self

        collectionView.layer.cornerRadius = collectionView.layer.frame.width / 10
        collectionView.backgroundColor = UIColor.clear
        collectionView.layer.borderColor = UIColor.blue.cgColor
        collectionView.layer.borderWidth = 3
        collectionView.allowsMultipleSelection = true
        extraCollectionView.addSubview(collectionView)

这是我的 collectionView 代码:

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 15
    



    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! uploadGenreSelectionCVC

        cell.layer.borderColor = UIColor.blue.cgColor
        cell.layer.borderWidth = 2
        cell.backgroundColor = UIColor.clear


        return cell
    

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 

        let width = (collectionView.bounds.width) / 3
        let height = (collectionView.bounds.height) / 5

        return CGSize(width:width, height:height)
    


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat 
        return 0
    

    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat 
        return 0
    




    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! uploadGenreSelectionCVC

        print("yo")
        cell.contentView.layer.backgroundColor = UIColor.red.cgColor
    

&& 这是单元格本身

 let genreLabel = UILabel()

    override func draw(_ rect: CGRect) 

        genreLabel.frame = CGRect(x: self.frame.size.width * 0, y: self.frame.size.height/2.7, width: self.frame.size.width, height: self.frame.size.height / 3)
        genreLabel.text = "Rap"
        genreLabel.textColor = UIColor.white
        genreLabel.textAlignment = .center


        addSubview(genreLabel)
    

我忘了做什么??

【问题讨论】:

【参考方案1】:

在您的单元格中覆盖isSelected,并根据值自定义您的单元格,

override var isSelected: Bool 
    didSet 
        self.backgroundColor = isHighlighted ? .lightGray : .clear
    

注意:该属性由collectionView自动设置

【讨论】:

我把它放在我的 CollectionViewCell 类中,但它仍然无法正常工作..? 删除您对didSelectItemAt 的实现,并且不要在cellForItem 中设置backgroundColor。看看它是如何工作的。

以上是关于UICollectionViewCell 在选择时不改变颜色的主要内容,如果未能解决你的问题,请参考以下文章

向下滚动时多次选择 UICollectionViewCell?

在第一次加载视图时预选择/突出显示 UICollectionViewCell

Swift:选择 UICollectionViewCell(在 UITableViewCell 内)时如何使用 Segue

选择 UIViewController 类的按钮时如何更新 UICollectionViewCell 中标签的颜色

UISearchBar 在尝试选择 UICollectionViewCell 时退出第一响应者

如何在UICollectionview在swift 3中滚动时禁用UICollectionViewCell