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

JSQMessageViewController - How do I set a collection cell to be incoming or outgoing cell?

在此方法中使用 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;
}

messageBubbleImageDataForItemAtIndexPath方法中,您必须将消息的发件人与您的用户进行比较。如果发件人是您的用户,return 和 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]];
}

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

默认情况下它是 JSQDefaultSender 但我的代码只在知道发件人的情况下才设置它;所以我在发件人未知时使用了回退。

想法是获得

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

播客文件内:JSQMessagesViewController.m

以便将它们定位在左侧或右侧。

最后我不得不在我的代码中执行此操作,在那里我准备好显示我的消息

 if (message.sender.remoteID)
    {
        senderID = @"JSQDefaultSender";
    }
    else
    {
        senderID = @"sender";
    }

这有效并解决了我的问题。

非常感谢大家

对于搜索此内容的任何人,当前的解决方案是覆盖 JSQMessagesViewController 上的 isOutgoingMessage() 方法,而不是已批准的方法。