Ios JSQMessagesViewController-发送带有附加图像文件的文本消息

Ios JSQMessagesViewController-发送带有附加图像文件的文本消息,ios,objective-c,jsqmessagesviewcontroller,Ios,Objective C,Jsqmessagesviewcontroller,我正在使用JSQMessagesViewController发送和接收消息。它对文本消息非常有效是否可以使用JSQMessagesViewController框架发送带有附加图像文件的文本消息。 单击时,应显示附加的图像文件。像这样的 发送消息应在消息窗口中显示如下内容。 用于发送照片 - (void)addPhotoMediaMessage { JSQPhotoMediaItem *photoItem = [[JSQPhotoMediaItem alloc] initWithImage

我正在使用JSQMessagesViewController发送和接收消息。它对文本消息非常有效是否可以使用JSQMessagesViewController框架发送带有附加图像文件的文本消息。

单击时,应显示附加的图像文件。像这样的

发送消息应在消息窗口中显示如下内容。

用于发送照片

- (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];
}

不,不可能将两者作为一条消息发送,但您可以使用唯一的自定义标识符将它们作为两条消息发送,然后在应用程序中将它们合并在一起。。
希望帮助

要完成此任务,您必须创建一个自定义单元格,然后在CollectionView中使用该单元格

首先,将JSQMessage子类化为如下内容,以保留图像URL(附件)的数据-

现在,您必须将该类用于所有聊天信息

接下来,您必须为自定义单元格创建一个自定义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()
    }
}
现在我们必须在
jsqMessageViewController
子类中使用这个CustomCell

viewDidLoad
中,向collection视图注册nib

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
    }
}
这将成功呈现自定义单元格


最后,点击自定义视图单元格后,您可以切换到新的VC(别忘了传递图像数据)并适当地显示图像。

您可以分享一些代码吗?我该怎么做。这可能会有很大帮助。谢谢,我不知道Objective C,但可以用Swift编写代码。这会有帮助吗?一封邮件可以附加多个文件吗?你也可以是多个文件。在我的例子中,文件的意思是uiimage OnlyID答案帮助?@utkbansal bro我正在将您的代码转换为目标c。一旦完成,请告诉您
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
    }
}