Я работаю с JSQMessagesViewController и реализовал три цвета пузырьков. Дополнительный цвет предназначен для указания неутвержденного сообщения в модерируемой комнате чата.JSQMessagesViewController обновление цвета пузыря изображения при обновлении
Я запускаю брандмауэр Firebase и обновляю утвержденный флаг при изменении записей в чате.
Все идет хорошо, и данные изменяются в реальном времени. Проблема заключается в цветах чата, независимо от того, что я делаю, они не изменятся.
Я попробовал недействительность макета, reloaddata, непосредственно доступ к ячеек (подходит только для чтения), и ничто, кажется, не меняет цвет, кроме как оставлять вид чата и возвращаться.
messageRef.observe(.childChanged, with: { (snapshot) in
let key = snapshot.key
if let dict = snapshot.value as? [String: AnyObject] {
let approved = (dict["approved"]?.boolValue ?? true)
let indexOfMesage = self.messages.index(where:{$0.key == key})
var message = self.messages[indexOfMesage!]
message.approved = approved
print(message)
self.collectionView.performBatchUpdates({() -> Void in
self.collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()
}, completion:nil)
}
Любая помощь будет оценена по достоинству. Вышеприведенный код является лишь одной из многих попыток.
Добавление моего «messageBubbleImageDataForItemAt» вызов для получения дополнительной информации после того, как ответ ниже.
override func collectionView(_ collectionView: JSQMessagesCollectionView!, messageBubbleImageDataForItemAt indexPath: IndexPath!) -> JSQMessageBubbleImageDataSource! {
let message = messages[indexPath.item] // 1
if message.messageItem.senderId == senderId { // 2
if (message.approved == true){
return outgoingBubbleImageView
}else{
return outgoingUnnaprovedBubbleImageView
}
}else if (self.superUsers.contains(message.messageItem.senderId)){
return incomingAdminBubbleImageView
}else { // 3
if (message.approved == true){
return incomingBubbleImageView
}else{
return incomingUnnapprovedBubbleImageView
}
}
}
Это очень близко к тому, что у меня есть, я не нахожу сообщениеBubbleImageDataForItemAt, указанное в протоколе JSQMessageData. – Beland
Я использую нечто очень похожее, вам не нужно соответствовать протоколу JSQMessageData. messageBubbleImageDataForItemAt вызывается и работает для меня при первом загрузке, но он, похоже, не работает для перезагрузки/пакетного обновления и т. д. – Beland
Интересно, мне нужно будет присмотреться, когда у меня будет время. –