Arrays UITableViewCell未正确着色
我有一个自定义的Arrays UITableViewCell未正确着色,arrays,swift,uitableview,Arrays,Swift,Uitableview,我有一个自定义的UITableViewCell,其中有2个标题部分(一个用于主持人,一个用于成员) 这是一个聊天应用程序,所以当我从数据库中获取聊天的成员及其相应的状态(即成员或主持人)后,我将它们存储在一个数组中,并根据该数据填充我的手机 当当前登录的用户与传递给单元格的user.id匹配时,我想更新单元格的contentView.backgroundColor时,就会出现问题 我知道成员(全部)只有3个,但当我从单元格打印userId和currentUserId时,我看到它被调用了4次,这很
UITableViewCell
,其中有2个标题
部分(一个用于主持人
,一个用于成员
)
这是一个聊天应用程序,所以当我从数据库中获取聊天的成员及其相应的状态(即成员或主持人)后,我将它们存储在一个数组中,并根据该数据填充我的手机
当当前登录的用户与传递给单元格的user.id
匹配时,我想更新单元格的contentView.backgroundColor
时,就会出现问题
我知道成员(全部)只有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")
}
}
上面的两条打印语句打印以下内容:
用户ID:ZgoQHyzAoPOS3amv当前用户ID:T3kOyOWvl6aZhDY
用户ID:FtvyJ7FshZQuGpLR08
当前用户ID:T3kOyOWvl6aZhDY
用户ID:ZgoQHyzAoPOS3amv
当前用户ID:T3kOyOWvl6aZhDY
用户ID:T3kOyOWvl6aZhDY
当前用户ID:T3kOyOWvl6aZhDY
它基本上是第二次打印出一个用户,我不知道为什么。(随机用户,有时是当前用户,影响单元格的着色方式,有时是不同的用户,因为数组未排序)您需要为以下内容添加其他条件:
if userId == currentUserId {
contentView.backgroundColor = UIColor.hex("F0F4F6")
}
因为一旦背景颜色改变,它将如何恢复
添加其他条件:
if userId == currentUserId {
contentView.backgroundColor = UIColor.hex("F0F4F6")
}
else {
contentView.backgroundColor = "Default color"
}
或者您可以添加到cellForRowAt
:
cell.contentView.backgroundColor = "Default color"