我有以下函数被调用以添加消息:
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]
}
我返回该indexPath的消息日期。消息显示正确,但没有显示名称。
答案 0 :(得分:15)
我认为你错过了attributedTextForMessageBubbleTopLabelAtIndexPath
应该看起来像这样
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
}
祝你好运
答案 1 :(得分:5)
新更新的方法
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
}
}
答案 2 :(得分:0)
确保添加此功能以显示名称:
override func collectionView(collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
return 15
}
答案 3 :(得分: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
}