Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays UITableViewCell未正确着色_Arrays_Swift_Uitableview - Fatal编程技术网

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"