2016-07-14 102 views
1

我正在使用JSQMessagesViewController發送和接收消息。它適用於文本消息。 是否可以使用JSQMessagesViewController框架發送附加圖像文件的文本消息。JSQMessagesViewController - 發送具有附加圖像文件的文本消息

所附圖像文件應該被示出,被點擊時。像這樣的東西。

發送消息應顯示這樣的消息窗口。

enter image description here

發送照片

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

發送短信

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

我不知道目標C,但可以寫在斯威夫特的代碼。這會有幫助嗎? – utkbansal

+0

可以有多個文件附加到一條消息?你也可以將多個文件也設爲 – utkbansal

+0

。在我的情況下文件意味着只有圖片 – ChenSmile

回答

4

爲了完成這個任務,你必須創建一個自定義的細胞,然後使用該細胞在你的CollectionView

首先子類在JSQMessage類類似以下,以保持數據的圖像的URL(附件) -

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

} 

現在,你將不得不使用這個類爲您的所有聊天消息。

接下來,您將不得不爲您的自定義單元格創建自定義xib文件。 在這種XIB您將添加一個標籤和圖像視圖消息文本和附件圖標。

現在創建代表您的自定義單元格一個類。這將是東西如下 -

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

現在,我們已經在我們的JSQMessagesViewController子類使用此CustomCell。

viewDidLoad註冊您的筆尖與集合視圖

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

現在你終於可以使用您的自定義單元格 -

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

這應該成功使您的自定義單元格。

最後輕敲你可以Segue公司到一個新的VC自定義視圖電池(不要忘記將您的圖像數據),並適當地顯示圖像。

0

不,它不可能同時發送的一個消息,但你可以給他們作爲具有唯一定製標識的兩條消息IER,然後CONCAT在一起在你的應用程序.. 希望能夠幫助

+0

可以分享一些代碼我怎麼能這樣做。這可能是很大的幫助。謝謝 – ChenSmile