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