быстрое отображение метки в табличном представлении показывает ячейку при прокрутке в неправильном положении - PullRequest
0 голосов
/ 17 февраля 2020

Я создал представление с табличным представлением, чтобы показать членов группы. У этой группы также есть участники. Эти члены также перечислены в массиве, называемом admins. Я получаю данные для этого табличного представления следующим образом:

  func getGroupData(){
    self.admins.removeAll()
    self.members.removeAll()
    self.tableView.reloadData()
    let db = Firestore.firestore()
      let docRef = db.collection("Groups").document(groupId)

      docRef.getDocument { (document, error) in
          if let document = document, document.exists {
              let dataDescription = document.data().map(String.init(describing:)) ?? "nil"

                let url = URL(string: document.get("imageUrl") as! String)
            self.groupthumb.kf.setImage(with: url)

            if let admin = document.get("admins") as? [String] {
                self.admins = admin
            }
            if self.admins.contains(Auth.auth().currentUser!.uid){
                self.addUser.isHidden = false
            }else{
                self.addUser.isHidden = true
            }
            if let user = document.get("members") as? [String]{
                let userids = user
                self.memberslabel.text = "Mitglieder (\(userids.count))"
                self.getUserDetails(userids: userids, admins: self.admins)
            }
            self.labelGroupName.text = document.get("name") as! String
            if document.get("publicGroup") as! Bool{
                self.isGroupLocked.image = UIImage(named: "baseline_lock_open_black_24pt")
            }else{
                self.isGroupLocked.image = UIImage(named: "baseline_lock_black_24pt")
            }

          } else {
              print("Document does not exist")
          }

    }
}
func getUserDetails(userids: [String], admins: [String]){
    let db = Firestore.firestore()
    for userid in userids{
               let docRef = db.collection("Users").document(userid)

               docRef.getDocument { (document, error) in
                   if let document = document, document.exists {
                       let dataDescription = document.data().map(String.init(describing:)) ?? "nil"

                        let userObject = UserObject.init()
                    if let name = document.get("name") as? String{
                        userObject.name = name
                    userObject.imageUrl = document.get("imageUrl") as! String
                    }

                    userObject.id = document.documentID
                    if admins.contains(document.documentID){
                        userObject.isAdmin = true
                    }else{
                        userObject.isAdmin = false
                    }
                    self.members.append(userObject)
                    self.tableView.reloadData()

                   } else {
                       print("Document does not exist")
                   }
               }
        }
    }

И это моя ячейка для строки в методе:

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
           let cell = tableView.dequeueReusableCell(withIdentifier: "groupemberscell", for: indexPath) as! GroupDetailTableViewCell
           let object = members[indexPath.row]
            cell.userthumb.layer.masksToBounds = false
            cell.userthumb.layer.cornerRadius = cell.userthumb.frame.height/2
            cell.userthumb.clipsToBounds = true

     cell.username.text = object.name
    if let imageUrl = object.imageUrl as? String{
        let url = URL(string: object.imageUrl!)
        cell.userthumb.kf.setImage(with: url)
    }

    if object.isAdmin!{
        cell.admin.text = "Admin"
        cell.admin.textColor = UIColor(hex: "#009688")
        cell.admin.layer.borderColor = UIColor(hex: "#009688").cgColor
        cell.admin.layer.cornerRadius = 5

    }else{
        cell.admin.isHidden = true
    }
     return cell
}

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

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