按类型聚合会话
IMKit 支持在会话列表中按照会话类型进行聚合(折叠)。设置聚合显示的会话类型后,该类型的会话在会话列表中仅被展示为一个聚合条目。默认情况下,IMKit 的会话列表页面会以平铺方式展示所有本地会话。
提示
下图展示了设置了单聊类型会话聚合显示的效果。在会话列表中,所有单聊会话折叠为“单聊消息”(左侧),点击后跳转到聚合会话列表(右侧)。IMKit 支持通过全局配置修改聚合会话页面的标题与头像。
用法
- 会话列表中的聚合会话项目不支持通过会话置顶功能设置为置顶项目。
设置聚合显示的会话类型
在初始化会话列表 RCConversationListViewController
或子类时,设置需要聚合的会话类型。支持单聊、群聊、系统会话类型。注意,您需要将 RCConversationType
转为 NSNumber构建 Array。
使用 collectionConversationTypeArray
参数传入聚合显示的会话类型。下例中我们聚合显示所有系统会话。
调用 RCConversationListViewController
类的初始化方法构建会话列表页面,在 displayConversationTypeArray
中设置会话列表中需要包含的会话的类型,在 collectionConversationTypeArray
中设置需要聚合(折叠显示)的会话类型。
NSArray *displayConversationTypeArray = @[@(ConversationType_PRIVATE), @(ConversationType_GROUP), @(ConversationType_SYSTEM)];
NSArray *collectionConversationTypeArray = @[@(ConversationType_SYSTEM)];
RCConversationListViewController *conversationListVC = [[RCDChatListViewController alloc] initWithDisplayConversationTypes:displayConversationTypeArray collectionConversationType:collectionConversationTypeArray];
[self.navigationController pushViewController:conversationListVC animated:YES];
参数 | 类型 | 说明 |
---|---|---|
displayConversationTypeArray | NSArray (NSNumber *) | 列表中需要显示的会话类型数组。需要将 RCConversationType 转为 NSNumber构建 Array。 |
collectionConversationTypeArray | NSArray (NSNumber *) | 列表中需要聚合为一条显示的会话类型数组。您需要将 RCConversationType 转为 NSNumber构建 Array。 |
点击进入聚合会话列表
-
您需要处理会话列表页面的点击事件,在点击聚合会话条目时,进入子会话列表。
/*!
点击会话列表中Cell的回调
@param conversationModelType 当前点击的会话的Model类型
@param model 当前点击的会话的Model
@param indexPath 当前会话在列表数据源中的索引值
@discussion 您需要重写此点击事件,跳转到指定会话的会话页面。
如果点击聚合Cell进入具体的子会话列表,在跳转时,需要将isEnteredToCollectionViewController设置为YES。
*/
- (void)onSelectedTableRow:(RCConversationModelType)conversationModelType
conversationModel:(RCConversationModel *)model
atIndexPath:(NSIndexPath *)indexPath; -
在进入子会话列表前,设置
RCConversationListViewController
子类的isEnteredToCollectionViewController
属性为YES
。//聚合会话类型,此处自定设置。
if (conversationModelType == RC_CONVERSATION_MODEL_TYPE_COLLECTION) {
YouConversationListViewController *temp = [[YouConversationListViewController alloc] init];
NSArray *array = [NSArray arrayWithObject:[NSNumber numberWithInteger:model.conversationType]];
[temp setDisplayConversationTypes:array];
[temp setCollectionConversationType:nil];
temp.isEnteredToCollectionViewController = YES;
[self.navigationController pushViewController:temp animated:YES];
}