如果只能选择两个,如何更改UiCollectionView中单元格的颜色

时间:2018-09-05 04:38:13

标签: ios arrays swift button uicollectionviewcell

我在UICollectionView单元格内使用过按钮,我想按钮可以更改颜色,只有两个索引,如果单击其他按钮uicolor.clear,其他按钮就不能更改颜色

enter image description here

而且我想这样,所以如何使用sender.backgroundColor

enter image description here

func collectionView(_: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellB", for: indexPath) as! BandingCollectionViewCell

            cell.bBandingCell.addTarget(self, action: #selector(masterAction3(_:)), for: .touchUpInside)

        return cell
    }

{

@objc func masterAction3(_ sender: UIButton) {
        var indexPath = collectionView.indexPath(for: ((sender.superview?.superview) as! BandingCollectionViewCell))
        if sender.isSelected {
            sender.isSelected = false
            switch indexPath?.row {
            case 0:
                print("0")
                sender.backgroundColor = UIColor.clear
            case 1:
                print("1")
                sender.backgroundColor = UIColor.clear

            default:
                print("default")
                sender.backgroundColor = UIColor.blue
            }


        } else {
            sender.isSelected = true
            switch indexPath?.row {
            case 0:
                print("0")
                sender.backgroundColor = UIColor.blue
            case 1:
                print("1")
                sender.backgroundColor = UIColor.blue

            default:
                print("default")
                sender.backgroundColor = UIColor.clear
            }

        }

    }

2 个答案:

答案 0 :(得分:2)

当您选择一个单元格时,将设置isSelected。您可以像这样自定义您的单元格。

class YourCollectionViewCell: UICollectionViewCell {


  override var isSelected: Bool {
    didSet {
        self.contentView.backgroundColor = isSelected ?.blue : .clear
    }  
  }
}

NB :无需手动添加操作。删除选择器方法

答案 1 :(得分:1)

我会这样:

  1. 使用自定义UICollectionViewCell子类(无按钮,因为集合视图单元格会自行处理选择内容)
  2. 在此单元格类中覆盖isSelected属性,如下所示:

    override var isSelected: Bool {
        didSet {
            // set color according to state
            self.backgroundColor = self.isSelected ? .blue : .clear 
        }
    }
    
  3. 在控制您的collectionView的课堂上,执行collectionView.allowsMultipleSelection = true

  4. 在您的UICollectionViewDelegate实现方法中(这将防止一次选择两个以上的单元):

    func collectionView(_ collectionView: UICollectionView, shouldSelectItemAt indexPath: IndexPath) -> Bool {
        return (collectionView.indexPathsForSelectedItems?.count ?? 0) < 2
    }
    

这样,您不需要在单元格内放置按钮。