¿Cómo hacer que el nombre de visualización del remitente aparezca con JSQMessageViewController?

Tengo la siguiente function que se llama para agregar un post:

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

Luego en esta function

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

Devuelvo la date del post para esa ruta de índice. El post aparece correctamente pero no hay un nombre para mostrar.

Nuevos methods actualizados

 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 } } 

Creo que te estás perdiendo el attributedTextForMessageBubbleTopLabelAtIndexPath debería parecer algo así

  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) } } 

Editar:

También asegúrese de darle a la label una altura con esta function

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

Buena suerte 🚀

Asegúrese de agregar esta function para mostrar el nombre:

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

Aquí está el código para 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 }