2016-07-14 100 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