gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:14:19 26 4
gpt4 key购买 nike

我正在使用 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];
}

最佳答案

要完成此任务,您必须创建一个自定义单元格,然后在您的 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 中,您将为消息文本和附件图标添加标签和 ImageView 。

现在创建一个代表您的自定义单元格的类。它将是如下内容 -

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 中将您的 Nib 注册到 Collection View 中

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

这应该会成功呈现您的自定义单元格。

最后,在点击自定义 View 单元格时,您可以转到一个新的 VC(不要忘记传递您的图像数据)并适本地显示图像。

关于ios - JSQMessagesViewController - 发送带有附加图像文件的文本消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com