IM 即时通讯 (441)
Android (210)
- 初始化&链接 (8)
- 事件&监听处理 (7)
- 用户信息 (13)
- 会话列表 (16)
- 聊天会话 (26)
- 消息处理 (35)
- 自定义消息 (6)
- 音视频 (2)
- 推送&通知 (34)
- 扩展功能 (4)
- 第三方地图 (3)
- 依赖&配置 (9)
- 升级说明 (3)
- 其他 (44)
iOS (166)
- SDK 导入 (10)
- 连接 (8)
- 事件处理 (2)
- 用户信息 (3)
- 会话列表 (14)
- 聊天会话 (44)
- 消息处理 (26)
- 自定义消息 (8)
- 推送&通知 (19)
- 扩展功能 (5)
- 国际化 (4)
- 音视频 (3)
- 其他 (20)
Web (36)
Server (29)
撤回文本消息后,增加“重新编辑”功能。
只针对文本消息,在撤回消息后,增加“重新编辑”,点击后,之前撤回消息的内容会被添加到输入框,类似微信中的效果。
发布时间: 2019-06-21 17:49
回答:
实现思路:
针对撤回消息,重写 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]; } } }