在此方法中使用iOS的JSQMessage podfile;
collectionView:(JSQMessagesCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { .. }
如何将其设置为使用JSQMessagesCollectionViewCellIncoming
或JSQMessagesCollectionViewCellOutgoing
?我发现难以找到其他应用程序如何执行此操作的示例
我的代码;
- (UICollectionViewCell *)collectionView:(JSQMessagesCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
JSQMessagesCollectionViewCell *cell = (JSQMessagesCollectionViewCell*)[super collectionView:collectionView cellForItemAtIndexPath:indexPath];
[cell.textView setDataDetectorTypes:UIDataDetectorTypeNone];
cell.textView.text = nil;
VICChatMessage <JSQMessageData> *messageData = (VICChatMessage*)[collectionView.dataSource collectionView:collectionView messageDataForItemAtIndexPath:indexPath];
cell.textView.attributedText = messageData.attributedText;
return cell;
}
答案 0 :(得分:3)
我能够解决问题。这与发件人的详细信息有关。
默认情况下为JSQDefaultSender
但我的代码只是在知道发件人时设置它;所以当发件人不知道的时候我使用了后备。
想法是获得
BOOL isOutgoingMessage = [messageSender isEqualToString:self.sender];
:JSQMessagesViewController.m
这样它就可以将它们放在左侧或右侧。
最后,我必须在我的代码中执行此操作,以便我准备好显示消息
if (message.sender.remoteID)
{
senderID = @"JSQDefaultSender";
}
else
{
senderID = @"sender";
}
这可以解决我的问题。
非常感谢所有人
答案 1 :(得分:0)
在messageBubbleImageDataForItemAtIndexPath
方法中,您必须将邮件的发件人与您的用户进行比较。发件人是您的用户,返回outgoingMessagesBubbleImage
。如果没有,请使用incomingMessagesBubbleImage
- (id<JSQMessageBubbleImageDataSource>)collectionView:(JSQMessagesCollectionView *)collectionView messageBubbleImageDataForItemAtIndexPath:(NSIndexPath *)indexPath
{
JSQMessagesBubbleImageFactory *bubbleFactory = [[JSQMessagesBubbleImageFactory alloc] init];
Message *message = [your_messages objectAtIndex:indexPath.item];
if ([message.senderId isEqualToString:self.senderId]) {
return [bubbleFactory outgoingMessagesBubbleImageWithColor:[UIColor jsq_messageBubbleBlueColor]];
}
return [bubbleFactory incomingMessagesBubbleImageWithColor:[UIColor jsq_messageBubbleLightGrayColor]];
}
答案 2 :(得分:0)
对于搜索此内容的任何人,当前的解决方案是覆盖isOutgoingMessage()
上的JSQMessagesViewController
方法,而不是批准方法。