0

Ich bin ein Chat-App zu entwickeln, und ich habe dieses enter image description hereSwift - JSQMessagesViewController Angezeigt eingehende avatar E-Mail oder Benutzername

Das Problem ist nun, wie kann ich die Benutzername auf der Oberseite der Nachricht zeige Blasen, wie dies auf der Demo ? https://raw.githubusercontent.com/jessesquires/JSQMessagesViewController/develop/Screenshots/screenshot2.png

Ich suche nach override func collectionView(collectionView: JSQMessagesCollectionView!, senderDisplayNameDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageAvatarImageDataSource! Aber ich denke, dass es nicht möglich ist. Was denkst du die Lösung hier? Vielen Dank!

+0

wegen des Mangels an Flexibilität hilft, wenn Sie eine Full-Flag-Messaging-Anwendung benötigen würde ich die JSQ nicht empfehlen, am Ende haben wir unser eigenes Schreiben auf ViewController, das ist auch ziemlich schwierig ... –

Antwort

2

Zum Anzeigen von UserName oben der eingehenden Nachricht JSQ hat unter Methoden.

//MARK: To View usernames above bubbles 

override func collectionView(collectionView: JSQMessagesCollectionView!, attributedTextForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> NSAttributedString! { 
    let message = messages[indexPath.item]; 

    // Sent by me, skip 
    if message.sender() == sender { 
     return nil; 
    } 

    // Same as previous sender, skip 
    if indexPath.item > 0 { 
     let previousMessage = messages[indexPath.item - 1]; 
     if previousMessage.sender() == message.sender() { 
      return nil; 
     } 
    } 

    return NSAttributedString(string:message.sender()) 
} 

override func collectionView(collectionView: JSQMessagesCollectionView!, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout!, heightForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> CGFloat { 
    let message = messages[indexPath.item] 

    // Sent by me, skip 
    if message.sender() == sender { 
     return CGFloat(0.0); 
    } 

    // Same as previous sender, skip 
    if indexPath.item > 0 { 
     let previousMessage = messages[indexPath.item - 1]; 
     if previousMessage.sender() == message.sender() { 
      return CGFloat(0.0); 
     } 
    } 

    return kJSQMessagesCollectionViewCellLabelHeightDefault 
} 

Der obige Code ist für mich gearbeitet, ich hoffe, es wird auch für Sie arbeiten. Für weitere Informationen können Sie sehen,

Demo

https://github.com/jessesquires/JSQMessagesViewController

1

ich glaube, Sie fehlen nur.

override func collectionView(collectionView: JSQMessagesCollectionView?, layout collectionViewLayout: JSQMessagesCollectionViewFlowLayout?, heightForMessageBubbleTopLabelAtIndexPath indexPath: NSIndexPath!) -> CGFloat { 
    // Override point: 
    // 
    // Here we check for what our setting is for displaying the senderDisplayName 
    // if we dont want to display it we just return a height of 0. 
    // Then we check to see if (The current user) 
    // sent the message if so we return 0, because we know our own name, 
    // other wise we return the defualt height. 
    // 

    return kJSQMessagesCollectionViewCellLabelHeightDefault 
} 

Das ist, was die meisten Leute Lassen Sie mich wirft wissen, ob das