解决方案:
1. 通过消息的附加信息标识消息状态
调用下面接口对消息设置附加信息,用户标识消息状态,自定义消息 cell 需要通过判断设置的附加信息来修改 UI 展示。
例如:报名类型的消息,在点击“去报名”按钮时,调用 [[RCIMClient sharedRCIMClient] setMessageExtra:消息的messageId value:“已报名”] 来设置。
/*!
设置消息的附加信息
@param messageId 消息ID
@param value 附加信息
@return 是否设置成功
*/
- (BOOL)setMessageExtra:(long)messageId value:(NSString *)value;
2. 通知聊天界面修改数据源并刷新:
在设置消息的附加信息后,发送通知给聊天界面对象。
聊天页面:
历数据源,修改对应 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。
例如:报名类型的消息,在点击“去报名”按钮后,将“去报名”改为“已报名”
- (void)setDataModel:(RCMessageModel *)model {
RCMessage *msg = [[RCIMClient sharedRCIMClient] getMessage:model.messageId];
NSString *extra = msg.extra;
if ([extra isEqualToString:“已报名”]) {
修改 UI
}
}