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设置气泡上方的高度,但不设置气泡的顶部标签。嘿,这正是我想要的但是,出现了一个错误。它返回了一个错误,即条件绑定的初始值设定项必须具有可选类型,而不是字符串。如何解决此问题?