Выбор ячейки постоянного просмотра коллекции - PullRequest
0 голосов
/ 08 мая 2018

пожалуйста, потерпите меня, поскольку я новичок в быстром программировании.

У меня есть myCollectionViewController, который является подклассом UICollectionViewController. Ячейки для MyCollectionViewController представляют собой класс MyCollectionViewCell, который является пользовательским UICollectionViewCell.

Что я пытаюсь сделать, это изменить фон MyCollectionViewCell на основе выбора пользователя И сохранить этот выбор, когда пользователь прокручивает к другим ячейкам MyCollectionViewController. Я попробовал два способа сделать это, и пока оба потерпели неудачу.

Первым способом было написать код в методе didSelectItemAt MyCollectionViewController:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "myCell", for: indexPath) as! MyCollectionViewCell

    cell.contentView.backgroundColor = UIColor.red
}

Однако это не сработало, и цвет ячейки не изменился.

Другой способ, которым я пытался это сделать, - это изменить свойство isSelected MyCollectionViewCell.

override var isSelected: Bool {
    // Change what happens when the user selects a cell

    didSet {

        if self.isSelected {
            self.contentView.backgroundColor = Colours.primary

        } else {
            self.contentView.backgroundColor = Colours.secondary

        }  
    }
}

Хотя это сработало, выбор не сохранился. То есть, когда пользователь прокручивал в другую ячейку в collectionView, а затем прокручивал назад, выбор исчезал.

Любой совет будет оценен.

1 Ответ

0 голосов
/ 08 мая 2018

Не используйте dequeue в didSelectItemAt, так как он вернет другую ячейку, кроме нажатой

var allInde = [IndexPath]()

  func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    let cell = collectionView.cellForItem(at:indexPath) as!   MyCollectionViewCell

    cell.contentView.backgroundColor = UIColor.red

    if !(allIndex.contains(indexPath)) {
        allInde.append(indexPath)
    }
}

и в cellForItem проверьте, находится ли indexpath для отображения в массиве и раскрасьте его

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "id", for: indexPath as IndexPath) as! MyCollectionViewCell

       if allIndex.contains(indexPath) {
          cell.contentView.backgroundColor = Colours.primary
       }
       else {
          cell.contentView.backgroundColor = Colours.secondary
       }
  }

// Здесь обновленный код

Sprain

...