我有一个自定义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
userId:FtvyJ7FshZQuGpLR08
currentUserId:T3kOyOWvl6aZhDY
userId:ZgoQHyzAoPOS3amv
currentUserId:T3kOyOWvl6aZhDY
userId:T3kOyOWvl6aZhDY
currentUserId:T3kOyOWvl6aZhDY
它基本上是第二次打印出用户,我不知道为什么。 (随机用户,有时是当前用户,这会影响单元格的着色方式,有时会由于数组未排序而改变用户的身份)
答案 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"