会话页面提供了多种点击回调:点击cell内容、点击cell中的URL和电话号码、点击头像、长按头像、长按cell内容。
// RCConversationViewController Class
#pragma mark - 点击事件回调
/*!
点击Cell中的消息内容的回调
@param model 消息Cell的数据模型
@discussion SDK在此点击事件中,针对SDK中自带的图片、语音、位置等消息有默认的处理,如查看、播放等。
您在重写此回调时,如果想保留SDK原有的功能,需要注意调用super。
*/
- (void)didTapMessageCell:(RCMessageModel *)model;
/*!
长按Cell中的消息内容的回调
@param model 消息Cell的数据模型
@param view 长按区域的View
@discussion SDK在此长按事件中,会默认展示菜单。
您在重写此回调时,如果想保留SDK原有的功能,需要注意调用super。
*/
- (void)didLongTouchMessageCell:(RCMessageModel *)model
inView:(UIView *)view;
/*!
点击Cell中URL的回调
@param url 点击的URL
@param model 消息Cell的数据模型
*/
- (void)didTapUrlInMessageCell:(NSString *)url
model:(RCMessageModel *)model;
/*!
点击Cell中电话号码的回调
@param phoneNumber 点击的电话号码
@param model 消息Cell的数据模型
*/
- (void)didTapPhoneNumberInMessageCell:(NSString *)phoneNumber
model:(RCMessageModel *)model;
/*!
点击Cell中头像的回调
@param userId 点击头像对应的用户ID
*/
- (void)didTapCellPortrait:(NSString *)userId;
/*!
长按Cell中头像的回调
@param userId 头像对应的用户ID
*/
- (void)didLongPressCellPortrait:(NSString *)userId;
在会话页面,用户可以借助RCConversationViewController内置的UI发送、插入和删除消息。您也可以借助代码接口完成这种操作。
// RCConversationViewController Class
#pragma mark 发送消息
/*!
发送消息
@param messageContent 消息的内容
@param pushContent 接收方离线时需要显示的远程推送内容
@discussion 当接收方离线并允许远程推送时,会收到远程推送。
远程推送中包含两部分内容,一是pushContent,用于显示;二是pushData,用于携带不显示的数据。
SDK内置的消息类型,如果您将pushContent置为nil,会使用默认的推送格式进行远程推送。
自定义类型的消息,需要您自己设置pushContent来定义推送内容,否则将不会进行远程推送。
如果您需要设置发送的pushData,可以使用RCIM的发送消息接口。
*/
- (void)sendMessage:(RCMessageContent *)messageContent
pushContent:(NSString *)pushContent;
/*!
重新发送消息
@param messageContent 消息的内容
@discussion 发送消息失败,点击小红点时,会将本地存储的原消息实体删除,回调此接口将消息内容重新发送。
如果您需要重写此接口,请注意调用super。
*/
- (void)resendMessage:(RCMessageContent *)messageContent;
#pragma mark 插入消息
/*!
在会话页面中插入一条消息并展示
@param message 消息实体
@discussion 通过此方法插入一条消息,会将消息实体对应的内容 Model 插入数据源中,并更新 UI。
请注意,这条消息只会在 UI 上插入,并不会存入。
用户调用这个接口插入消息之后,如果退出会话页面再次进入的时候,这条消息将不再显示。
*/
- (void)appendAndDisplayMessage:(RCMessage *)message;
#pragma mark 删除消息
/*!
删除消息并更新UI
@param model 消息Cell的数据模型
*/
- (void)deleteMessage:(RCMessageModel *)model;
其中,如果您想在当前会话中自动插入一条消息(如提示消息等),根据您能否要将其保存到本地,有不同的处理。如下示例:
//是否保存到本地,如果不保存,则下次进入聊天界面将不再显示。
BOOL saveToDB = NO;
RCMessage *insertMessage;
RCInformationNotificationMessage *warningMessage = [RCInformationNotificationMessage notificationWithMessage:@"提醒消息" extra:nil];
if (saveToDB) {
// 如果保存到本地,需要调用insertMessage生成消息实体并插入。
insertMessage = [[RCIMClient sharedRCIMClient] insertOutgoingMessage:self.conversationType
targetId:self.targetId
sentStatus:SentStatus_SENT
content:warningMessage];
} else {
// 如果不保存到本地,需要初始化消息实体并将messageId要设置为-1。
insertMessage =[[RCMessage alloc] initWithType:self.conversationType
targetId:self.targetId
direction:MessageDirection_SEND
messageId:-1
content:warningMessage];
}
// 在当前聊天界面插入该消息
[self appendAndDisplayMessage:insertMessage];
您可以在消息已经发送、即将插入数据源的之后回调(除非有意愿,您可以在这之后设置其中的消息内容)。在消息发送完成和已经显示的之后,您也可以回调。
// RCConversationViewController Class
/*!
准备发送消息的回调
@param messageContent 消息内容
@return 修改后的消息内容
@discussion 此回调在消息准备向外发送时会回调,您可以在此回调中对消息内容进行过滤和修改等操作。
如果此回调的返回值不为nil,SDK会对外发送返回的消息内容。
*/
- (RCMessageContent *)willSendMessage:(RCMessageContent *)messageContent;
/*!
发送消息完成的回调
@param status 发送状态,0表示成功,非0表示失败
@param messageContent 消息内容
*/
- (void)didSendMessage:(NSInteger)status
content:(RCMessageContent *)messageContent;
/*!
即将在会话页面插入消息的回调
@param message 消息实体
@return 修改后的消息实体
@discussion 此回调在消息准备插入数据源的时候会回调,您可以在此回调中对消息进行过滤和修改操作。
如果此回调的返回值不为nil,SDK会将返回消息实体对应的消息Cell数据模型插入数据源,并在聊天界面中显示。
*/
- (RCMessage *)willAppendAndDisplayMessage:(RCMessage *)message;
/*!
即将显示消息Cell的回调
@param cell 消息Cell
@param indexPath 该Cell对应的消息Cell数据模型在数据源中的索引值
@discussion 您可以在此回调中修改Cell的显示和某些属性。
*/
- (void)willDisplayMessageCell:(RCMessageBaseCell *)cell
atIndexPath:(NSIndexPath *)indexPath;
会话页面提供了三种未读消息数的提醒,您可以按照您的意愿进入或关闭。
1、导航栏返回图标中的未读消息数提示
displayConversationTypeArray表明在导航栏返回图标中需要统计这些会话类型的未读数ifly格式如何打开,如果您必须关闭此功能,赋值为nil即可。
// RCConversationViewController Class
/*!
需要统计未读数的会话类型数组(在导航栏的返回按钮中显示)
@discussion 此属性表明在导航栏的返回按钮中需要统计显示哪部分的会话类型的未读数。
(需要将RCConversationType转为NSNumber构建Array)
*/
@property(nonatomic, strong) NSArray *displayConversationTypeArray;
2、右上角的未读消息数提示
当一个会话收到长期消息时(达到一个屏幕能显示的内容),进入该会话后,会在右上角提醒用户在当前可视区域上面存在的未读消息数,用户点击该提示图标,会滚动到最起初的未读消息处。
// RCConversationViewController Class
/*!
当收到的消息超过一个屏幕时,进入会话之后,是否在右上角提示上方存在的未读消息数
@discussion 默认值为NO。
开启该提示功能之后,当一个会话收到大量消息时(超过一个屏幕能显示的内容),
进入该会话后,会在右上角提示用户上方存在的未读消息数,用户点击该提醒按钮,会跳转到最开始的未读消息。
*/
@property(nonatomic, assign) BOOL enableUnreadMessageIcon;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-121563-4.html