Swift JSQMessagesViewController名称在顶部

时间:2016-12-02 11:51:52

标签: uicollectionview swift3 jsqmessagesviewcontroller

我正在显示接收者的发件人姓名。但是,我不想在人发送的每个文本上显示名称。例如,如果他/她连续发送消息,我只是希望它在第一条消息的顶部显示名称。我将在这里提供我的聊天截图:

screenshot of my chat

换句话说,我只是希望它在他/她发送的“第一个”消息上显示用户的名字。我试图在attributedTextForMessageBubbleTopLabelAt没有运气的情况下解决这个问题。

我试图检查上一条消息的senderId是否等于之前的senderId - 然后以某种方式查明是否可以显示它。但是,这导致许多失败的尝试失败,索引超出范围,只是没有工作解决方案。

这是我现在的代码:

let message = messages[indexPath.item]

    switch message.senderId {

    case FIRAuth.auth()!.currentUser!.uid:
        return nil
        break

    default:

        guard let senderDisplayName = message.senderDisplayName else {
            assertionFailure()
            return nil
        }

        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.alignment = NSTextAlignment.left

        let attributedString = NSAttributedString(string: message.senderDisplayName,
                                                  attributes: [
                                                    NSParagraphStyleAttributeName: paragraphStyle,
                                                    NSBaselineOffsetAttributeName: NSNumber(value: 0)
            ])

        return attributedString
        break

    }

1 个答案:

答案 0 :(得分:0)

首次查看时,首先要解决这个问题。我们需要做的是确定消息是否是一组消息中的第一个消息。所以我创建了一个函数来确定消息是否是该人发送的第一个消息。

private func firstMessageInSet(indexOfMessage: IndexPath) -> Bool {
    return messages[safe: indexOfMessage.item - 1]?.senderId() == messages[safe: indexOfMessage.item]?.senderId()
}

它只是检查以前的消息senderId,看它是否与当前消息相同。

然后用这种方法叫那个人:

override func collectionView(_ collectionView: JSQMessagesCollectionView!, attributedTextForMessageBubbleTopLabelAt indexPath: IndexPath!) -> NSAttributedString! {
    guard let message = messages[safe: indexPath.item] else { return nil }
    return firstMessageInSet(indexOfMessage: indexPath) ? nil : NSAttributedString(string: message.senderDisplayName)
}

这将检查它是否是集合中的第一个,以及它是否返回senderDisplayName。现在这是用短手但最终与

相同
if firstMessageInSet(indexOfMessage: indexPath) {
   return NSAttributedString(string: message.senderDisplayName)
} else { 
  return nil
}

希望这能帮助你带来好运