2016-03-14 84 views
6

我有以下函數被調用增加一個消息:如何讓發件人顯示名稱與JSQMessageViewController一起顯示?

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。該消息正確顯示,但沒有顯示名稱。

回答

3

新的更新方法

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 

     } 
    } 
+0

這對我來說非常合適 – Sente

+0

嘿,那正是我在找的東西,然而,發生了一個錯誤。它給出了一個錯誤,說,條件綁定的初始化器必須有可選類型,而不是String。我該如何解決這個問題? – AlexVilla147

14

我認爲你缺少的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) 

    } 
} 

編輯:

另外,還要確保你給的標籤一個HIGHT使用此功能

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

好運

+1

由於它的工作代碼。我只需添加另一個函數以指定頂部標籤的高度。 – Tob

+0

真棒。你會接受答案嗎? :) –

+0

@Tob能否請您發佈您用於指定頂部標籤高度的功能? – MikeG

0

確保添加此功能以顯示名稱:

override func collectionView(collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> CGFloat { 
    return 15 
} 
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 
    }