Как мне просто показать изображение профиля рядом с последним сообщением пользователя в чате
Я использую JSQ Messages Controller, чтобы добавить функцию чата в свое приложение, но мне также удалось создать ее самостоятельно с коллекцией. Однако Injust не может понять, как показать изображение профиля рядом с последним сообщением пользователя. Например, он пишет 3 сообщения, и никто в чате ничего не пишет между ними. Сейчас я просто хочу показать только рядом с третьим сообщением фотографию профиля. Когда я возвращаю элементы (ячейки), я просто могу редактировать элемент, который я собираюсь вернуть (по адресу indexPath.item). Я могу убедиться, что сообщение до (в indexPath.item - 1) имеет тот же senderID. Но я не могу проверить, если ячейка в indexPath.item + 1) от того же отправителя. Поскольку я не могу проверить второй, я понятия не имею, как решить мою проблему. Я надеюсь, вы поняли, что я хочу сделать.
1 ответ
Сначала я хотел бы указать вам на новый проект, который вступает во владение JSQMessageViewController
поскольку JSQMessageViewController
устарела, называется MessageKit.
Сделайте функцию, чтобы определить, является ли это последним сообщением в наборе.
//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()
}
}
Теперь просто добавьте вызов isLastInSet
в пределах avatarImageDataForItemAt
если он возвращает ложь, установите изображение на ноль
func collectionView(_ collectionView: JSQMessagesCollectionView!, avatarImageDataForItemAt indexPath: IndexPath!) -> JSQMessageAvatarImageDataSource! {
if let message = messages[indexPath.item]{
if isLastInSet(indexOfMessage: indexPath) {
return ImageData
}
}
return nil
}