JSQMessagesViewController – 发送带有附加图像文件的文本消息
我正在使用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]; }
要完成这个任务,你必须创build一个自定义单元格 ,然后在你的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") } }
现在你将不得不使用这个类来处理所有的聊天消息。
接下来,你将不得不为你的自定义单元格创build一个自定义的xib文件 。 在该xib中,您将为消息文本和附件图标添加标签和图像视图。
现在创build一个代表你自定义单元格的类 。 这将是如下的东西 –
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 } }
这应该成功呈现您的自定义单元格。
最后,在点击自定义视图单元格后,您可以继续使用新的VC(不要忘记传递图像数据)并适当地显示图像。
不,不可能将两者都作为一条消息发送,但是可以将它们作为具有唯一定制标识符的两条消息发送,然后在您的应用程序中一起串联它们。希望帮助