
IM即时通讯
安全可靠、全球互通

实时音视频
流畅稳定、省钱省力
回答:
针对撤回消息,重写 cell,增加“重新编辑”的 UI。
在聊天页面为撤回消息绑定自定义 cell。
撤回消息时候,记录撤回消息的内容。
点击“重新编辑”,将之前记录的撤回消息内容添加到输入框。
自定义 cell 类:RCDRecallMessageCell.zip,解压后添加到工程中。
在聊天页面添加必要代码:
引入头文件:
#import "RCDRecallMessageCell.h #import <RongIMLib/RongIMLib.h>
添加属性,记录撤回内容:
//撤回消息的内容 @property (nonatomic, strong) NSString *recallContent;
在 viewDidLoad 中,绑定自定义 cell:
//绑定撤回消息的自定义 cell [self registerClass:[RCDRecallMessageCell class] forMessageClass:[RCRecallNotificationMessage class]];
重写必要的回调方法:
- (void)recallMessage:(long)messageId { [super recallMessage:messageId]; //记录撤回消息的内容 RCMessage *recalledMsg = [[RCIMClient sharedRCIMClient] getMessage:messageId]; if ([recalledMsg.content isMemberOfClass:[RCTextMessage class]]) { RCTextMessage *txtMsg = (RCTextMessage *)recalledMsg.content; self.recallContent = txtMsg.content; } } - (void)willDisplayMessageCell:(RCMessageBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath { if ([cell isMemberOfClass: [RCDRecallMessageCell class]] && self.recallContent.length > 0) { //为撤回消息自定义 cell 添加代理 RCDRecallMessageCell *recallCell = (RCDRecallMessageCell *)cell; [recallCell setDelegate:self]; //为撤回消息添加之前被撤回消息的内容,以便点击“重新编辑”时候使用 if (self.recallContent.length > 0) { RCMessageModel *model = self.conversationDataRepository[indexPath.row]; [[RCIMClient sharedRCIMClient] setMessageExtra:model.messageId value:self.recallContent]; [recallCell setDataModel:model]; self.recallContent = @""; } } } - (void)didTapUrlInMessageCell:(NSString *)url model:(RCMessageModel *)model { //点击“重新编辑”后的回调方法 if ([model.content isKindOfClass:[RCRecallNotificationMessage class]]) { //获取之前记录的被撤回消息的内容 RCMessage *message = [[RCIMClient sharedRCIMClient] getMessage:model.messageId]; NSString *content = message.extra; //如果内容存在,就将内容显示到输入框中 if (content.length > 0) { [self.chatSessionInputBarControl.inputTextView becomeFirstResponder]; self.chatSessionInputBarControl.inputTextView.text = [NSString stringWithFormat:@"%@%@",self.chatSessionInputBarControl.inputTextView.text,content]; } } }