Изменение ячейки collectionView меняет их все - PullRequest
0 голосов
/ 15 марта 2019

Это код, который получает информацию от Firebase.Он изменяет изображение ячейки imageView и текст метки.При выполнении кода все ячейки имеют одинаковое изображение и текст метки.

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

    Database.database().reference().child("users").observeSingleEvent(of: .childAdded) { (snapshot: DataSnapshot) in
        if let dict = snapshot.value as? [String : Any] {
            let imageURL = dict["imageURL"] as! String
            let url = URL(string: imageURL)
            let username = dict["username"] as! String
            cell.imageView!.sd_setImage(with: url, completed: nil)
            cell.usernameLabel.text = username
        }
    }

    return cell
}

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Фактически для каждого рендеринга ячейки вы выбираете всех пользователей из вашей базы данных Firebase. Последний звонок каждого пользователя - это пользователь, которого вы видите несколько раз. Он отменяет предыдущие.

Чтобы решить вашу проблему, вы можете хранить пользователей в массиве.

var users = [User]()

Чтобы заполнить этот массив, вы вызываете аналогичную функцию, подобную этой, в вашем viewDidLoad

func fetchUsers() {
        Database.database().reference().child("users").observeSingleEvent(of: .childAdded) { (snapshot: DataSnapshot) in
            if let dict = snapshot.value as? [String : Any] {
                let user = User()
                //set user properties here
                users.append(user)
          }
      }
  }

Когда вы загрузили всех пользователей, вы должны перезагрузить свой collectionView

collectionView.reloadData()

В функции cellForItemAt теперь вы можете получить доступ к пользователям

let user = users[indexPath.row]

Используйте переменную пользователя для настройки вашей ячейки

0 голосов
/ 15 марта 2019

Чтобы устранить эту проблему, сначала вы должны собрать все данные из базы данных в массиве, а затем соответственно использовать этот массив для просмотра таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...