JSQMessageViewController - 如何将收集单元格设置为传入或传出单元格?

时间:2015-07-15 14:04:05

标签: ios objective-c outbound inbound jsqmessagesviewcontroller

enter image description here

在此方法中使用iOS的JSQMessage podfile;

collectionView:(JSQMessagesCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { .. }

如何将其设置为使用JSQMessagesCollectionViewCellIncomingJSQMessagesCollectionViewCellOutgoing?我发现难以找到其他应用程序如何执行此操作的示例

我的代码;

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

3 个答案:

答案 0 :(得分:3)

我能够解决问题。这与发件人的详细信息有关。

默认情况下为JSQDefaultSender但我的代码只是在知道发件人时设置它;所以当发件人不知道的时候我使用了后备。

想法是获得

BOOL isOutgoingMessage = [messageSender isEqualToString:self.sender];

podfile中的

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方法,而不是批准方法。