UITableViewCell无法正确着色

时间:2018-09-19 11:51:12

标签: arrays swift uitableview

我有一个自定义UITableViewCell,其中包含2个header部分(一个用于Moderators,一个用于Members)。

这是一个聊天应用程序,因此,当我从数据库中获取聊天的成员及其相应状态(即成员或主持人)后,我将它们存储在数组中并根据该数据填充单元格。

当当前登录的用户与传递到单元格的contentView.backgroundColor匹配时,我想更新单元格的user.id时出现问题。

我知道一个事实(所有成员)只有3个,但是当我从单元格中打印userIdcurrentUserId时,我发现它被称为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
  userId:FtvyJ7FshZQuGpLR08
  currentUserId:T3kOyOWvl6aZhDY
  userId:ZgoQHyzAoPOS3amv
  currentUserId:T3kOyOWvl6aZhDY
  userId:T3kOyOWvl6aZhDY
  currentUserId:T3kOyOWvl6aZhDY

它基本上是第二次打印出用户,我不知道为什么。 (随机用户,有时是当前用户,这会影响单元格的着色方式,有时会由于数组未排序而改变用户的身份)

1 个答案:

答案 0 :(得分:1)

您需要为添加其他条件:

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

因为一旦更改了backgroundColor,它将如何还原。

添加其他条件:

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

或者您可以添加cellForRowAt

cell.contentView.backgroundColor = "Default color"