Ios 如何使发送方显示名称与JSQMessageViewController一起显示?

Ios 如何使发送方显示名称与JSQMessageViewController一起显示?,ios,swift,jsqmessagesviewcontroller,Ios,Swift,Jsqmessagesviewcontroller,我有以下函数,用于添加消息: func addMessage(text: String, displayName: String) { let message = JSQMessage(senderId: "tester", displayName: displayName, text: text) messages.append(message) finishReceivingMessage() } 然后在这个函数中 ove

我有以下函数,用于添加消息:

    func addMessage(text: String, displayName: String) {
        let message = JSQMessage(senderId: "tester", displayName: displayName, text: text)
        messages.append(message)

        finishReceivingMessage()

}
然后在这个函数中

    override func collectionView(collectionView: JSQMessagesCollectionView!,
    messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
        return messages[indexPath.item]
}

我返回该消息的消息日期。消息显示正确,但没有显示名称

我认为您缺少了
AttributedTextFormMessageBubbletoLabelingDexpath
应该是这样的

 override func collectionView(collectionView: JSQMessagesCollectionView?, attributedTextForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> NSAttributedString! {
    let message = messages[indexPath.item]
    switch message.senderId {
    case CURRENTUSERID:
        return nil
    default:
        guard let senderDisplayName = message.senderDisplayName else {
            assertionFailure()
            return nil
        }
        return NSAttributedString(string: senderDisplayName)

    }
}
编辑:

此外,还应确保使用此功能为标签加上一个高度

override func collectionView(collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
   return 13 //or what ever height you want to give
}    

祝您好运确保添加此功能以显示名称:

 override func collectionView(collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
    return 15
}
新的更新方法

override func collectionView(_ collectionView: JSQMessagesCollectionView!, attributedTextForMessageBubbleTopLabelAt indexPath: IndexPath!) -> NSAttributedString!
     {
        let message = messages[indexPath.item]

        if message.senderId == senderId {
            return nil
        } else {
            guard let senderDisplayName = message.senderDisplayName else {
                assertionFailure()
                return nil
            }
            return NSAttributedString(string: senderDisplayName)

        }

    }

     override func collectionView(_ collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAt indexPath: IndexPath!) -> CGFloat
    {
        //return 17.0
        let message = messages[indexPath.item]

        if message.senderId == senderId {
            return 0.0
        } else {

            return 17.0

        }
    }

这是swift 3的代码

override func collectionView(_ collectionView: JSQMessagesCollectionView!, attributedTextForMessageBubbleTopLabelAt indexPath: IndexPath!) -> NSAttributedString! {
        return  NSAttributedString(string: senderDisplayName)
    }

     override  func collectionView(_ collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAt indexPath: IndexPath!) -> CGFloat {
        return 15 //your height
    }

谢谢,成功了。我还需要添加另一个函数来指定顶部标签的高度。@Tob您可以发布用于指定顶部标签高度的函数吗?这就是我使用的:
override func collectionView(collectionView:JSQMessagesCollectionView!、layout collectionViewLayout:JSQMessagesCollectionViewFlowLayout!、HeightForcellBottomLabelationXPath indexPath:NSIndexPath!)->CGFloat{return 15}
只需键入“collectionView”,就可以向下滚动,直到找到HeightForcellBottomLabelationXPath为止(还有一个指定顶部标签高度的功能)。对于那些希望将
NSAttributedString
显示在消息气泡顶部的人,请重写
HeightFormMessageBubbletoLabelatidexpath
方法。HeightForcellBottomLabelatidexpath设置气泡上方的高度,但不设置气泡的顶部标签。嘿,这正是我想要的但是,出现了一个错误。它返回了一个错误,即条件绑定的初始值设定项必须具有可选类型,而不是字符串。如何解决此问题?