2017-09-27 4 views
0

J'utilise JSQ Messages Controller pour ajouter une fonctionnalité de chat à mon application, mais j'ai également réussi à en créer un seul avec une vue de collection . Cependant Injust ne peut pas comprendre comment montrer l'image de profil juste à côté du dernier message d'un utilisateur. Par exemple, il écrit 3 messages et personne d'autre dans le chat n'écrit quoi que ce soit entre les deux. Maintenant, je veux juste montrer seulement à côté du troisième message l'image de profil. Quand je retourne les éléments (cellules) je peux juste éditer l'article que je suis sur le point de retourner (à indexPath.item) cependant. Je peux m'assurer que le message avant (à indexPath.item - 1) a le même senderID. Mais je ne peux pas vérifier si la cellule à indexPath.item + 1) provient du même expéditeur. Comme je ne suis pas capable de vérifier le second, je n'ai aucune idée de comment résoudre mon problème. J'espère que vous avez compris ce que je veux faire.Comment afficher le profil Image à côté du dernier message d'un utilisateur dans un chat

Répondre

1

D'abord, je voudrais vous indiquer le nouveau projet qui prend la relève JSQMessageViewController depuis JSQMessageViewController est dépréciée, il est appelé MessageKit.

Créez une fonction pour déterminer s'il s'agit du dernier message d'un ensemble.

//Check if it is the last message in all your messages 
//Check that the next message is not sent by the same person. 
func isLastInSet(indexOfMessage: IndexPath) -> Bool { 
    if indexOfMessage.item == messages.count -1 { 
     return true 
    } else if { 
     return messages[indexOfMessage.item].senderID() != messages[indexOfMessage.item + 1].senderID() 
    } 
} 

Maintenant, il suffit d'ajouter un appel à isLastInSet dans le avatarImageDataForItemAt si elle renvoie un ensemble de faux l'image à zéro

func collectionView(_ collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAt indexPath: IndexPath!) -> JSQMessageAvatarImageDataSource! { 
    if let message = messages[indexPath.item]{ 
     if isLastInSet(indexOfMessage: indexPath) { 
     return ImageData 
     } 
    } 
    return nil 
    } 
+0

Merci homme, je viens d'avoir à changer de petites choses pour le faire fonctionner !. Je pense que Swift 4 m'a forcé à le changer, mais votre idée était correcte! – AlexVilla147