JSQMessagesViewControllerを使用していて、3つのバブルカラーを実装しました。余分な色は、モデレートされたチャットルームで承認されていないメッセージを示すように設計されています。JSQMessagesViewController更新時にバブルイメージの色を更新する
チャットメッセージのエントリが変更された場合、Firebaseバックエンドを実行して承認済みフラグを更新しています。
すべてが順調で、データはリアルタイムで変更されています。問題は、私が彼らが何を変えなくても、チャットバブルの色になります。
私はレイアウトを無効にしようとしました、再ロードデータ、セルに直接アクセスしています(読み込み専用です)、チャットビューを離れて戻ってくる以外は何も変わっていないようです。
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
面白いことに、時間があると面白いです。 –