Как мне просто показать изображение профиля рядом с последним сообщением пользователя в чате

Я использую 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
  } 
Другие вопросы по тегам