(服务端扩展信息)改变自定义消息样式,即自定义消息 cell 根据数据改变 UI

针对业务状态来改变自定义消息的展示,例如:报名类型的消息,刚收到时 cell 上显示“去报名”,点击后改变为“已报名”。
发布时间: 2021-12-13 15:28

回答:

解决方案:

1. 通过消息的扩展信息标识消息状态,

     需要在发送消息时设置该消息可以设置扩展信息,参考文档设置 https://doc.rongcloud.cn/im/IOS/5.X/noui/message/expansion 

例如:报名类型的消息,发送消息时设置消息的扩展信息为“去报名”,UI 显示“去报名”按钮

   

2. 通知聊天界面修改数据源并刷新:

    在更新扩展信息或监听到扩展信息修改后,发送通知给聊天界面对象。

    更新: https://doc.rongcloud.cn/im/IOS/5.X/noui/message/expansion#%E6%9B%B4%E6%96%B0%E6%89%A9%E5%B1%95%E4%BF%A1%E6%81%AF

    监听:https://doc.rongcloud.cn/im/IOS/5.X/noui/message/expansion#%E6%B6%88%E6%81%AF%E6%89%A9%E5%B1%95%E7%9B%91%E5%90%AC


聊天页面:

    历数据源,修改对应 model 的 cellSize,因为只有修改了 cellSize,自定义消息 cell 中返回 CGSize 的方法才能回调,即重新设置 cell 高度,如果不需要改变 cell 高度,可以不修改。

     for (RCMessageModel *model in self.conversationDataRepository) {

             if (model.messageId == 修改了附加信息的消息的messageId) {

                 model.cellSize = CGSizeZero;

             }

         }

    主线程调 [self.conversationMessageCollectionView reloadData]; 刷新 UI


3. 自定义消息 cell 根据设置的附加信息来修改 UI

     调用 [self.conversationMessageCollectionView reloadData]; 后,会回调 cell 的 setDataModel 方法,在该方法中判断附加信息,来修改 UI。

     例如:报名类型的消息,在点击“去报名”按钮后,将 UI 修改为“已报名”


- (void)setDataModel:(RCMessageModel *)model {

    RCMessage *msg = [[RCIMClient sharedRCIMClient] getMessage:model.messageId];

    取 msg.expansionDic 的数据,根据自己设置的值来修改 UI。   

}