页面事件监听
页面事件监听
监听会话列表页面事件
您可以设置会话列表操作监听,实现自定义需求。以下列出了 RCConversationListViewController.h 提供的常用事件,您也可以直接参考 IMKit 源码,查看所有事件。
即将显示会话 Cell
重写 RCConversationListViewController 的此方法,可修改 Cell 的一些显示属性,如对会话列表自带 Cell 样式如字体颜色,字体大小进行修改。不建议修改 Cell 的布局。如果对 UI 比较高的定制需求,建议自定义会话列表中的会话 Cell。
- (void)willDisplayConversationTableCell:(RCConversationBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
cell | RCConversationBaseCell | 即将显示的 Cell |
indexPath | NSIndexPath | 该 Cell 对应的会话 Cell 数据模型在数据源中的索引值 |
点击会话 Cell
重写 RCConversationListViewController 的此方法,可跳转到您自定义的会话页面。
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
conversationModel:(RCConversationModel *)model
atIndexPath:(NSIndexPath *)indexPath;
已复制
1
2
3
参数 | 类型 | 说明 |
---|---|---|
conversationModelType | RCConversationModelType | 当前点击的会话的 Model 类型 |
model | RCConversationModel | 当前点击的会话的 Model |
indexPath | NSIndexPath | 当前会话在列表数据源中的索引值 |
点击会话头像
会话列表中的每个会话项目上均会显示一个头像图标,即会话头像(不是聊天页面内中消息列表中的头像)。单聊会话显示对方用户头像,群聊会话显示群组头像,聚合会话显示默认头像或应用程序主动设置的头像。
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didTapCellPortrait:(RCConversationModel *)model;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCConversationModel | 会话 Cell 的数据模型 |
长按会话头像
会话列表中的每个会话项目上均会显示一个头像图标,即会话头像(不是聊天页面内中消息列表中的头像)。单聊会话显示对方用户头像,群聊会话显示群组头像,聚合会话显示默认头像或应用程序主动设置的头像。
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didLongPressCellPortrait:(RCConversationModel *)model;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCConversationModel | 会话 Cell 的数据模型 |
删除会话
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didDeleteConversationCell:(RCConversationModel *)model;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCConversationModel | 会话 Cell 的数据模型 |
即将加载数据源
重写 RCConversationListViewController 的此方法,可修改、添加、删除数据源的元素来定制显示的内容,会话列表会根据您返回的修改后的数据源进行显示。数据源中存放的元素为会话 Cell 的数据模型,即 RCConversationModel
对象。
- (NSMutableArray *)willReloadTableData:(NSMutableArray *)dataSource;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
dataSource | NSMutableArray | 即将加载的增量数据源 |
dataSource 为增量数据,conversationListDataSource += dataSource
。如果需要更改全量数据的内容,可以更改 conversationListDataSource
。
即将更新未读消息数
当收到消息或删除会话时,会调用此回调。重写 RCConversationListViewController 的此方法,可以执行未读消息数相关的操作。
- (void)notifyUpdateUnreadMessageCount;
已复制
1
该方法在非主线程回调,如果想在本方法中操作 UI,请手动切换到主线程。
在会话列表中收到新消息
重写 RCConversationListViewController 的此方法,可自定义处理该事件。
- (void)didReceiveMessageNotification:(NSNotification *)notification;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
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;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
inputTextView | UITextView | 文本输入框 |
range | NSRange | 当前操作的范围 |
text | NSString | 插入的文本 |
输入框高度发生变化
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)chatInputBar:(RCChatSessionInputBarControl *)chatInputBar shouldChangeFrame:(CGRect)frame;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
chatInputBar | RCChatSessionInputBarControl | 输入工具栏 |
frame | CGRect | 输入工具栏最终需要显示的 Frame |
如重写此方法,请先调用父类方法。
准备发送消息
准备向外发送消息时会触发该回调(不支持通过插件发送的位置消息、小视频、融云贴纸表情消息)。重写 RCConversationViewController 的此方法,可自定义处理该事件。此回调的返回值不为 nil
时,SDK 会对外发送返回的消息内容。
- (RCMessageContent *)willSendMessage:(RCMessageContent *)messageContent;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
messageContent | RCMessageContent | 消息内容 |
通过位置插件、名片插件、融云贴纸表情发送的消息不会触发该回调。如果希望对消息进行拦截、过滤、修改等操作,建议使用 RCIMMessageInterceptor
协议设置拦截器,详见拦截消息。
发送消息完成
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didSendMessage:(NSInteger)status content:(RCMessageContent *)messageContent;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
status | NSInteger | 发送状态,0表示成功,非0表示失败 |
messageContent | RCMessageContent | 消息内容 |
取消消息发送
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didCancelMessage:(RCMessageContent *)messageContent;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
messageContent | RCMessageContent | 消息内容 |
即将将消息插入数据源
在消息准备插入数据源的时候会回调。重写 RCConversationViewController 的此方法,可对消息进行过滤和修改操作。 如果此回调的返回值不为 nil
,SDK 会将返回消息实体对应的消息 Cell 数据模型插入数据源,并在会话页面中显示。
- (RCMessage *)willAppendAndDisplayMessage:(RCMessage *)message;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
message | RCMessage | 消息内容 |
即将显示消息
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)willDisplayMessageCell:(RCMessageBaseCell *)cell atIndexPath:(NSIndexPath *)indexPath;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
cell | RCMessageBaseCell | 消息 Cell |
indexPath | NSIndexPath | 该 Cell 对应的消息Cell数据模型在数据源中的索引值 |
显示未注册消息的 Cell
重写 RCConversationViewController 的此方法,可设置未知消息类型(未注册的消息类型)的 Cell。
- (RCMessageBaseCell *)rcUnkownConversationCollectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath;
已复制
1
2
返回的 RCMessageBaseCell 及未注册消息需要显示的 Cell。
参数 | 类型 | 说明 |
---|---|---|
collectionView | UICollectionView | 当前 CollectionView |
indexPath | NSIndexPath | 该Cell对应的消息Cell数据模型在数据源中的索引值 |
显示未注册消息的 Cell 的高度
重写 RCConversationViewController 的此方法,可设置未知消息类型(未注册的消息类型)的 Cell 的显示高度。
- (CGSize)rcUnkownConversationCollectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
已复制
1
2
3
返回的 CGSize 为未注册消息 Cell 需要显示的高度。
参数 | 类型 | 说明 |
---|---|---|
collectionView | UICollectionView | 当前CollectionView |
collectionViewLayout | UICollectionViewLayout | 当前CollectionView Layout |
indexPath | NSIndexPath | 该Cell对应的消息Cell数据模型在数据源中的索引值 |
点击消息 Cell 头像
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didTapCellPortrait:(NSString *)userId;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
userId | NSString | 点击头像对应的用户ID |
长按消息 Cell 头像
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didLongPressCellPortrait:(NSString *)userId;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
userId | NSString | 点击头像对应的用户 ID |
点击消息 Cell 内容
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didTapMessageCell:(RCMessageModel *)model;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCMessageModel | 消息Cell的数据模型 |
IMKit 在此点击事件中融云定义的图片、语音、位置等消息有默认的处理,如查看、播放等。重写此回调时,如果想保留 SDK 原有的功能,需要注意调用 super。
长按消息 Cell 内容
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didLongTouchMessageCell:(RCMessageModel *)model inView:(UIView *)view;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCMessageModel | 消息Cell的数据模型 |
view | UIView | 长按区域的View |
重写此回调时,如果想保留 SDK 原有的功能,需要注意调用 super。
点击消息 Cell 中的 URL
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didTapUrlInMessageCell:(NSString *)url model:(RCMessageModel *)model;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCMessageModel | 消息Cell的数据模型 |
url | NSString | 点击的URL |
重写此回调时,如果想保留 SDK 原有的功能,需要注意调用 super。
点击消息 Cell 中的电话号码
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)didTapPhoneNumberInMessageCell:(NSString *)phoneNumber model:(RCMessageModel *)model;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCMessageModel | 消息Cell的数据模型 |
phoneNumber | NSString | 点击的电话号码 |
获取长按消息 Cell 的菜单
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (NSArray<UIMenuItem *> *)getLongTouchMessageCellMenuList:(RCMessageModel *)model;
已复制
1
参数 | 类型 | 说明 |
---|---|---|
model | RCMessageModel | 消息 Cell 的数据模型 |
重写此回调时,如果想保留 SDK 原有的功能,需要注意调用 super。
开始录制录音
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)onBeginRecordEvent;
已复制
1
结束录制录音
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)onEndRecordEvent;
已复制
1
取消录制录音
重写 RCConversationViewController 的此方法,可自定义处理该事件。
- (void)onCancelRecordEvent;
已复制
1
点击常用语按钮事件
要求 IMKit 版本 ≧ 5.6.3。
如果启用了 IMKit 快捷回复 功能,用户在会话页面点击常用语按钮后会弹出快捷回复。
您可以重写 RCConversationViewController 的以下方法,返回 YES
表示拦截,您可以自定义点击常用语按钮后的逻辑;否则返回 NO
,继续执行 SDK 默认逻辑。
- (BOOL)didTapCommonPhrasesButton;
已复制
1
消息全部拉取完成事件
此功能要求 IMKit SDK 版本 ≧ 5.8.2。
在实现消息拉取功能时,您可能需要知道何时已经拉取完所有可用的远端消息。为了获取这样的通知事件,您可以重写 RCConversationViewController 类中的 noMoreMessageToFetch
方法。
- (void)noMoreMessageToFetch;
已复制
1