JSQMessageViewController - 如何将集合单元格设置为传入或传出单元格?
JSQMessageViewController - How do I set a collection cell to be incoming or outgoing cell?
在此方法中使用 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;
}
在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()
方法,而不是已批准的方法。
在此方法中使用 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;
}
在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()
方法,而不是已批准的方法。