UITableViewCell не окрашен должным образом - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть пользовательский UITableViewCell с 2 header разделами (один для Moderators и один для Members).

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

Проблема возникает, когда я хочу обновить contentView.backgroundColor ячейки, когда текущий вошедший в систему пользователь совпадает с user.id, который передается в ячейку.

Я точно знаю, что членов (их всех) всего 3, но когда я печатаю userId и currentUserId из ячейки, я вижу, что это называется 4 раза, что странно.

  class ChatMembers: UIViewController { 
     var chatMembers = [
                    [UserModel](),
                    [UserModel]()
                  ]
     var participantsStatus = [String:String]()
     var chatId = ""


    override func viewDidLoad() {
       super.viewDidLoad()
       observeMemberStatus()
    }

func observeMemberStatus() {
    if chatId != "" {
        Api.Message.observeChatRoomMemberStatus(forChatId: chatId, completion: { memberAndStatus in
            self.participantsStatus = memberAndStatus

            for member in memberAndStatus {
                if member.value == "moderator" {
                    Api.Users.observeUsersShort(withId: member.key, completion: { user in
                        self.chatMembers[0].append(user)
                        DispatchQueue.main.async {
                            self.tableView.reloadData()
                        }
                    })
                }
                else {
                    Api.Users.observeUsersShort(withId: member.key, completion: { user in
                        self.chatMembers[1].append(user)
                        DispatchQueue.main.async {
                            self.tableView.reloadData()
                        }
                    })
                }
            }
        })
    }
}

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ChatParticipantSettingsTVC") as! ChatParticipantSettingsTVC
    let user = chatMembers[indexPath.section][indexPath.row]
    cell.user = user
    cell.delegateChatParticipantsProtocol = self
    return cell
}

И сама ячейка:

 var user: UserModel? {
    didSet {
        updateView()
    }
}

func updateView() {
    guard let currentUserId = Api.Users.CURRENT_USER?.uid else { return }
    guard let userId = user?.id else { return }

      print("userId: ", userId)
      print("currentUserId: ", currentUserId)
      // 
    if userId == currentUserId {
        contentView.backgroundColor = UIColor.hex("F0F4F6")
    }
}

2 приведенных выше оператора печати выводят следующее:

userId: ZgoQHyzAoPOS3amv
currentUserId:T3kOyOWvl6aZhDY
идентификатор пользователя: FtvyJ7FshZQuGpLR08
currentUserId: T3kOyOWvl6aZhDY
идентификатор пользователя: ZgoQHyzAoPOS3amv
currentUserId: T3kOyOWvl6aZhDY
идентификатор пользователя: T3kOyOWvl6aZhDY
currentUserId: T3kOyOWvl6aZhDY

Это в основном печатаетпользователь во второй раз, и я не знаю почему.(случайный пользователь, иногда это текущий пользователь, который влияет на цвет ячейки, а иногда другой пользователь, поскольку массив не сортируется)

1 Ответ

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

Вам необходимо добавить условие else для:

if userId == currentUserId {
    contentView.backgroundColor = UIColor.hex("F0F4F6")
}

Поскольку после изменения backgroundColor способ его возврата будет изменен.

Добавление условия else:

if userId == currentUserId {
    contentView.backgroundColor = UIColor.hex("F0F4F6")
}
else {
    contentView.backgroundColor = "Default color"
}

или вы можете добавить в cellForRowAt:

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