2016-07-14 3 views
1

Ich verwende JSQMessagesViewController zum Senden und Empfangen von Nachrichten.Es funktioniert gut für Textnachrichten. Ist es möglich, Textnachrichten mit angehängter Image-Datei über JSQMessagesViewController Framework zu senden?JSQMessagesViewController - Text senden Nachricht mit angehängten Bildern Datei

Die angehängte Bilddatei sollte angezeigt werden, wenn darauf geklickt wird. Etwas wie das.

Senden Sie Nachrichten sollte im Nachrichtenfenster wie folgt angezeigt werden.

enter image description here

Für Foto Senden

- (void)addPhotoMediaMessage 
{ 
    JSQPhotoMediaItem *photoItem = [[JSQPhotoMediaItem alloc] initWithImage:[UIImage imageNamed:@"goldengate"]]; 
    JSQMessage *photoMessage = [JSQMessage messageWithSenderId:kJSQDemoAvatarIdSquires 
               displayName:kJSQDemoAvatarDisplayNameSquires 
                media:photoItem]; 
    [self.messages addObject:photoMessage]; 
} 

Senden von SMS-Nachricht

- (void)didPressSendButton:(UIButton *)button 
     withMessageText:(NSString *)text 
       senderId:(NSString *)senderId 
    senderDisplayName:(NSString *)senderDisplayName 
        date:(NSDate *)date 
{ 
    [JSQSystemSoundPlayer jsq_playMessageSentSound]; 
    JSQMessage *message = [JSQMessage messageWithSenderId:senderId 
              displayName:senderDisplayName 
               text:text]; 
    [self.messages addObject:message]; 
    [self finishSendingMessageAnimated:YES]; 
    [self receiveAutoMessage]; 
} 
+0

Ich weiß nicht objective C aber kann den Code in Swift schreiben. Würde das helfen? – utkbansal

+0

können mehrere Dateien an eine Nachricht angehängt sein? – utkbansal

+0

ya kann auch mehrere Dateien sein. in meinem Fall Datei bedeutet uiimage nur – ChenSmile

Antwort

4

helfen, diese Aufgabe zu erfüllen Sie eine benutzerdefinierte Zelle erstellen müssen und dann diese Zelle in Ihrer Collection

Zunächst einmal Unterklasse verwenden die JSQMessage Klasse so etwas wie die Daten für das Bild Urls zu halten folgende (Attachments) -

class ChatMessage: JSQMessage { 

    internal var attachments : [NSURL]? 

    init(senderId: String!, senderDisplayName: String!, date: NSDate!, text: String!, attachments: [NSURL]?) { 
     self.attachments = attachments 
     super.init(senderId: senderId, senderDisplayName: senderDisplayName, date: date, text: text) 
    } 

    init(senderId: String!, senderDisplayName: String!, date: NSDate!, media: JSQMessageMediaData!) { 
     super.init(senderId: senderId, senderDisplayName: senderDisplayName, date: date, media: media) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 

Jetzt werden Sie diese Klasse für alle Chat-Nachrichten verwenden.

Als nächstes müssen Sie eine benutzerdefinierte XIB-Datei für Ihre benutzerdefinierte Zelle erstellen. In dieser XIB fügen Sie eine Beschriftung und eine Bildansicht für den Nachrichtentext und das Anhangssymbol hinzu.

Erstellen Sie jetzt eine Klasse, die Ihre benutzerdefinierte Zelle darstellt. Es wird etwas sein, wie folgt -

class CustomCell: UICollectionViewCell { 
    @IBOutlet weak var topLabel: UILabel! 
    @IBOutlet weak var bottomLabel: UILabel! 
    @IBOutlet weak var containerView: UIView! 
    @IBOutlet weak var dataLabel: UILabel! 
    @IBOutlet weak var attachmentIcon: UIImage! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 
} 

Jetzt müssen wir diese CustomCell in unserer JSQMessagesViewController Unterklasse verwenden.

In viewDidLoad registrieren Ihre Feder mit der Sammlung Ansicht

self.collectionView.registerNib(UINib(nibName: "CustomCell", bundle: nil), forCellWithReuseIdentifier: "CustomCell") 

Jetzt können Sie endlich Ihre individuelle Zelle verwenden -

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let message = messages[indexPath.item] 

    if message.attachments.count() != 0 { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CustomCell", forIndexPath: indexPath) as! CustomCell 

     cell.containerView.backgroundColor = UIColor.jsq_messageBubbleBlueColor() 
     cell.containerView.layer.cornerRadius = 15 
     return cell 
    } 

    else { 
     // Add code here for the normal cell 
    } 
} 

Dies sollte erfolgreich Ihre individuelle Zelle machen.

Schließlich tippen Sie auf die benutzerdefinierte Ansicht Zelle können Sie auf eine neue VC (vergessen Sie nicht, Ihre Bilder Daten übergeben) und zeigen Sie die Bilder entsprechend.

0

Nein, es ist nicht möglich, beide als eine Nachricht zu senden, aber Sie können sie senden als zwei Nachrichten mit einer eindeutigen benutzerdefinierten ID ier und dann concat sie zusammen in Ihrer App .. Hoffnung, die

+0

können Sie Code teilen, wie könnte ich das tun. es könnte eine große Hilfe sein. Vielen Dank – ChenSmile