页面事件监听
监听会话列表页面事件
您可以设置会话列表操作监听,实现自定义需求。以下列出了 RCConversationListViewController.h 提供的常用事件,您也可以直接参考 IMKit 源码,查看所有事件。
即将显示会话 Cell
重写 RCConversationListViewController 的此方法,可修改 Cell 的一些显示属性,如对会话列表自带 Cell 样式如字体颜色,字体大小进行修改。不建议修改 Cell 的布局。如果对 UI 比较高的定制需求,建议自定义会话列表中的会话 Cell。
- (void)willDisplayConversationTableCell:(RCConversationBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath;
参数 | 类型 | 说明 |
---|---|---|
cell | RCConversationBaseCell | 即将显示的 Cell |
indexPath | NSIndexPath | 该 Cell 对应的会话 Cell 数据模型在数据源中的索引值 |
点击会话 Cell
重写 RCConversationListViewController 的此方法,可跳转到您自定义的会话页面。
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
conversationModel:(RCConversationModel *)model
atIndexPath:(NSIndexPath *)indexPath;
参数 | 类型 | 说明 |
---|---|---|
conversationModelType | RCConversationModelType | 当前点击的会话的 Model 类型 |
model | RCConversationModel | 当前点击的会话的 Model |
indexPath | NSIndexPath | 当前会话在列表数据源中的索引值 |
点击会话头像
会话列表中的每个会话项目上均会显示一个头像图标,即会话头像(不是聊天页面内中消息列表中的头像)。单聊会话显示对方用户头像,群聊会话显示群组头像,聚合会话显示默认头像或应用程序主动设置的头像。
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didTapCellPortrait:(RCConversationModel *)model;
参数 | 类型 | 说明 |
---|---|---|
model | RCConversationModel | 会话 Cell 的数据模型 |
长按会话头像
会话列表中的每个会话项目上均会显示一个头像图标,即会话头像(不是聊天页面内中消息列表中的头像)。单聊会话显示对方用户头像,群聊会话显示群组头像,聚合会话显示默认头像或应用程序主动设置的头像。
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didLongPressCellPortrait:(RCConversationModel *)model;
参数 | 类型 | 说明 |
---|---|---|
model | RCConversationModel | 会话 Cell 的数据模型 |
删除会话
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didDeleteConversationCell:(RCConversationModel *)model;
参数 | 类型 | 说明 |
---|---|---|
model | RCConversationModel | 会话 Cell 的数据模型 |
即将加载数据源
重写 RCConversationListViewController 的此方法,可修改、添加、删除数据源的元素来定制显示的内容,会话列表会根据您返回的修改后的数据源进行显示。数据源中存放的元素为会话 Cell 的数据模型,即 RCConversationModel
对象。
- (NSMutableArray *)willReloadTableData:(NSMutableArray *)dataSource;
参数 | 类型 | 说明 |
---|---|---|
dataSource | NSMutableArray | 即将加载的增量数据源 |
dataSource 为增量数据,conversationListDataSource += dataSource
。如果需要更改全量数据的内容,可以更改 conversationListDataSource
。
即将更新未读消息数
当收到消息或删除会话时,会调用此回调。重写 RCConversationListViewController 的此方法,可以执行未读消息数相关的操作。
- (void)notifyUpdateUnreadMessageCount;
该方法在非主线程回调,如果想在本方法中操作 UI,请手动切换到主线程。
在会话列表中收到新消息
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didReceiveMessageNotification:(NSNotification *)notification;
参数 | 类型 | 说明 |
---|---|---|
notification | NSNotification | 收到新消息的 notification。notification 的 object 为 RCMessage 消息对象。userInfo 为 NSDictionary 对象,其中 key 值为 @"left",value 为还剩余未接收的消息数的 NSNumber 对象。 |
SDK 在此方法中针对消息接收有默认的处理(如刷新等),如果重写此方法,请注意调用 super。
监听会话页面事件
您可以设置会话页面操作监听,实现自定义需求。以下列出了 RCConversationViewController.h 提供的常用事件,您也可以直接参考 IMKit 源码,查看所有事件。
输入框内容发生变化
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)inputTextView:(UITextView *)inputTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
参数 | 类型 | 说明 |
---|---|---|
inputTextView | UITextView | 文本输入框 |
range | NSRange | 当前操作的范围 |
text | NSString | 插入的文本 |
输入框高度发生变化
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)chatInputBar:(RCChatSessionInputBarControl *)chatInputBar shouldChangeFrame:(CGRect)frame;
参数 | 类型 | 说明 |
---|---|---|
chatInputBar | RCChatSessionInputBarControl | 输入工具栏 |
frame | CGRect | 输入工具栏最终需要显示的 Frame |
如重写此方法,请先调用父类方法。
准备发送消息
准备向外发送消息时会触发该回调(不支持通过插件发送的位置消息、小视频、融云贴纸表情消息)。重写 RCConversationViewController 的此方法,可自定义处理该事件。此回调的返回值不为 nil
时,SDK 会对外发送返回的消息内容。
- (RCMessageContent *)willSendMessage:(RCMessageContent *)messageContent;
参数 | 类型 | 说明 |
---|---|---|
messageContent | RCMessageContent | 消息内容 |
通过位置插件、名片插件、融云贴纸表情发送的消息不会触发该 回调。如果希望对消息进行拦截、过滤、修改等操作,建议使用 RCIMMessageInterceptor
协议设置拦截器,详见拦截消息。
发送消息完成
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didSendMessage:(NSInteger)status content:(RCMessageContent *)messageContent;
参数 | 类型 | 说明 |
---|---|---|
status | NSInteger | 发送状态,0表示成功,非0表示失败 |
messageContent | RCMessageContent | 消息内容 |
取消消息发送
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didCancelMessage:(RCMessageContent *)messageContent;
参数 | 类型 | 说明 |
---|---|---|
messageContent | RCMessageContent | 消息内容 |
即将将消息插入数据源
在消息准备插入数据源的时候会回调。重写 RCConversationViewController 的此方法,可对消息进行过滤和修改操作。 如果此回调的返回值不为 nil
,SDK 会将返回消息实体对应的消息 Cell 数据模型插入数据源,并在会话页面中显示。
- (RCMessage *)willAppendAndDisplayMessage:(RCMessage *)message;