有沒有遇到過這樣的問題,在最近聊天記錄列表里面有 @ 你的消息够颠,點列表里面對應(yīng)的記錄,進(jìn)入聊天頁面以后榄鉴,跳到了最新接收到的消息履磨,想要看 @ 自己的消息,還得可勁兒的下來去找庆尘,使用體驗不好剃诅,想要改善的話,往下看驶忌。
實現(xiàn)思路就是獲取會話中 @ 自己的消息综苔,把這條消息的時間傳給聊天頁面,然后再跳轉(zhuǎn)位岔,就可以跳轉(zhuǎn)到這條消息了如筛。
- 在 push 到會話頁面之前,調(diào) RCIMClient 類下面接口抒抬,獲取 @ 自己的消息
/*! 獲取會話中@提醒自己的消息
@param conversationType 會話類型
@param targetId 目標(biāo)會話ID
@discussion 此方法從本地獲取被@提醒的消息(最多返回10條信息)
@warning 使用 IMKit 注意在進(jìn)入會話頁面前調(diào)用杨刨,否則在進(jìn)入會話清除未讀數(shù)的接口 clearMessagesUnreadStatus: targetId: 以及 設(shè)置消息接收狀態(tài)接口 setMessageReceivedStatus:receivedStatus:會同步清除被提示信息狀態(tài)。
*/
- (NSArray *)getUnreadMentionedMessages:(RCConversationType)conversationType targetId:(NSString *)targetId;
- 遍歷得到數(shù)組擦剑,找到自己想要跳轉(zhuǎn)到的消息妖胀,把消息的 sentTime 傳給要跳轉(zhuǎn)的聊天頁面,再 push 到聊天頁面惠勒。
/** 進(jìn)入頁面時定位的消息的發(fā)送時間
@discussion 用于消息搜索之后點擊進(jìn)入頁面等場景
*/
@property (nonatomic, assign) long long locatedMessageSentTime;
示例代碼
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType conversationModel:(RCConversationModel *)model atIndexPath:(NSIndexPath *)indexPath {
if (model.conversationType == ConversationType_GROUP) {
NSArray *msgs = [[RCIMClient sharedRCIMClient] getUnreadMentionedMessages:model.conversationType targetId:model.targetId];
if (msgs.count > 0) {
RCMessage *msg = msgs[0];
RCConversationViewController *vc = [[RCConversationViewController alloc] initWithConversationType:model.conversationType targetId:model.targetId];
vc.locatedMessageSentTime = msg.sentTime;
[self.navigationController pushViewController:vc animated:YES];
}
}
}
代碼接口文檔:https://docs.rongcloud.cn/v4/views/im/ui/guide/private/list/event/ios.html#onSelectedTableRow
融云的官網(wǎng):https://www.rongcloud.cn/
從融云的官網(wǎng)文檔能夠找到點擊會話列表 cell 的回調(diào)方法赚抡,在該方法里獲取 @ 自己的消息,如果有纠屋,將該消息的 sentTime 設(shè)置給聊天頁面對象的 locatedMessageSentTime涂臣,再 push。
**注:示例代碼中使用的聊天頁面是融云 SDK 中的原始類,如果你自己繼承了赁遗,就替換為你自己的類署辉,別的就沒啥了。