我正在使用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
}
}
}
這是非常接近我有什麼,我沒有找到在JSQMessageData協議列出的messageBubbleImageDataForItemAt。 – Beland
我使用非常類似的東西,你不需要符合JSQMessageData協議。 messageBubbleImageDataForItemAt被調用,併爲我工作的第一負載,但它似乎並沒有對重載/批量更新等工作 – Beland
有趣的,我將不得不仔細看時,我有一段時間了。 –