Как изменить цвет ячейки в UiCollectionView, если можно выбрать только две - PullRequest
0 голосов
/ 05 сентября 2018

Я использую кнопку внутри ячейки 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 голосов
/ 05 сентября 2018

Я бы сделал это так:

  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
    }
    

Таким образом, вам не нужна кнопка внутри ячейки.

0 голосов
/ 05 сентября 2018

При выборе ячейки будет установлено isSelected. И вы можете настроить свою ячейку следующим образом.

class YourCollectionViewCell: UICollectionViewCell {


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

NB : нет необходимости добавлять действия вручную. Удалить ваш метод выбора

...