indexPath UICollectionView изменить, когда я прокручиваю вниз - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть простое CollectionView, мне нужно установить фоновую ячейку с индексом 1 зеленым, все нормально при запуске (смотрите рисунок)

, но после прокрутки вниз и назад у меня появляется много зеленых клеток? что мне делать?

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {[enter image description here][1]
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! MessageCollectionViewCell
    cell.textMessageLabel.text = arrMes[indexPath.row].textMessage
    cell.dataMessage.text = arrMes[indexPath.row].dataOfMessage

    if indexPath.row == 1 {
        cell.backgroundColor = .green
    }
    return cell
}

Ответы [ 2 ]

1 голос
/ 18 апреля 2020

Ячейки используются повторно - отсюда и вызов dequeueReusableCell().

Итак, вам нужно установить цвет фона по умолчанию:

if indexPath.row == 1 {
    cell.backgroundColor = .green
} else {
    cell.backgroundColor = .white // or whatever your "default" color should be
}

Редактировать (после комментария)

Поскольку вы показываете "Сообщение" ... подумайте о приложении "чат". Сообщения могут быть «от кого-то» или «кому-то». Я предполагаю, что ваши данные уже знают это, поэтому вы можете сделать:

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

    cell.textMessageLabel.text = arrMes[indexPath.row].textMessage
    cell.dataMessage.text = arrMes[indexPath.row].dataOfMessage

    if arrMes[indexPath.row].fromOrTo == "from" {
        cell.backgroundColor = .green
    } else {
        cell.backgroundColor = .yellow
    } 

    return cell
}
0 голосов
/ 18 апреля 2020

При прокрутке вниз в представлении коллекции повторно используются эти ячейки, поэтому вы можете видеть больше ячеек с зеленым фоном. Чтобы это исправить, вам нужно установить цвет фона для других ячеек, которые не имеют индекса 1. Так, например, вы можете обновить свою функцию:

if indexPath.row == 1 {
    cell.backgroundColor = .green
} else {
    cell.backgroundColor = .white // your desired color
}

или более короткой возможностью:

 cell.backgroundColor = indexPath.row == 1 ? .green : .white
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...