arrays - UITableViewCell 没有正确着色
问题描述
我有一个UITableViewCell
包含 2 个header
部分的自定义项(一个用于Moderators
,一个用于Members
)。
这是一个聊天应用程序,所以在我从数据库中获取聊天成员及其相应状态(即成员或主持人)后,我将它们存储在一个数组中并根据该数据填充我的单元格。
当我想contentView.backgroundColor
在当前登录的用户与user.id
传递给单元格的匹配时更新单元格时,问题就出现了。
我知道成员(全部)只有 3 个,但是当我从单元格中打印 theuserId
和 thecurrentUserId
时,我看到它被调用了 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:T3kOyOWvl6
它基本上第二次打印出一个用户,我不知道为什么。(随机用户,有时是当前用户,这会影响单元格的着色方式,有时是不同的用户,因为数组没有被排序)
解决方案
您需要添加 else 条件:
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"
推荐阅读
- python - db.execute 不返回适当的数据。尝试访问数据时出错
- c# - 使用组合框检索值并将值发送到我的 txtbox 谢谢
- python - 如何计算 2 个排名列表之间的距离?
- javascript - 纱线/节点 - JavaScript - 导入和导出问题
- c# - 如何根据另一个表中的 Id 获取文本框值?
- python - 如何创建深紫色的热图
- flutter - FlutterBloc:BlocListener 不消耗发射状态
- firebase - 更改 Firebase 实时数据库中的值时如何查看 Flutter 应用程序的更改?
- c++ - 使用 getline() 将文件解析为新文件,同时忽略重复条目
- javascript - React 中带有钩子的功能组件中的事件处理程序