会话列表页面
Global IM UIKit 的会话列表页面展示了当前用户最近参与的单聊会话、群聊会话和系统会话。
会话列表界面
如需显示会话列表的昵称和头像,您需要为 Global IM UIKit 设置一个用户信息提供者。Global IM UIKit 通过用户信息提供者获取需要显示的资料数据。详情请参见用户信息。
会话列表以会话对象为元素,展示了当前用户设备上最近的会话对象,也是进行会话的主要入口。Global IM UIKit 的本地消息数据库中生成消息时,就会生成会话列表,并按照时间倒序排列。Global IM UIKit 针对会话项目还支持左滑编辑和右滑编辑,提供置顶、免打扰、标记已读等操作。
- 左滑编辑:会话条目向左滑时,会显示开启/关闭通知和删除按钮;
- 右滑编辑:会话条目向右滑时,会显示置顶/取消置顶和标记已读/未读按钮;

导航栏
RCChatListHeaderView 组件是对系统导航条 UINavigationBar 的自定义,通过定义标题和左右按钮和,在 ViewController 加载时赋值给 UINavigationBar。标题(RCBarTitleView)是自定义视图,支持标题和副标题两个 Label。按钮(RCBarItem)支持名称、图片和自定义视图显示,非自定义视图的按钮点击事件通过 Action 抛出。
会话列表
RCChatListView 组件使用 UITableView 实现列表展示,支持通过 emptyView 属性设置占位视图。在会话列表中,每条会话对应一个 Cell,会话的展示样式基本一致,在列表中使用 RCChatCell 展示,支持注册自定义会话 Cell。
初始化
基于 Global IM UIKit 开发时,推荐继承使用
RCChatListViewController类,创建自定义的会话列表页面。在排查或复现与会话页面相关的问题时,可以直接使用RCChatListViewController类。
调用 RCChatListViewController 类的初始化方法 initWithChatType: 构建会话列表页面,设置会话列表中需要包含的会话的类型。会话类型是 Option 类型:
/// 会话类型
typedef NS_OPTIONS(NSUInteger, RCChatType) {
RCChatTypeSingle = 1 << 0, /// 单聊
RCChatTypeGroup = 1 << 1, /// 群聊
RCChatTypeSystem = 1 << 2, /// 系统
};
继承 RCChatListViewController 创建自定义的会话列表的类 DemoChatListViewController,将初始化的实例通过 UINavigationController 展示出来:
{
// 会话列表的展示类型,以单聊和群聊为例
RCChatType chatType = RCChatTypeSingle|RCChatTypeGroup;
// 会话列表初始化
DemoChatListViewController *controller = [[DemoChatListViewController alloc] initWithChatType:chatType];
// 必须使用 UINavigationController 展示
[self.navigationController pushViewController:controller animated:YES];
// 如果外部没有用 UINavigationController,需要创建一个
// UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller];
// navigationController.modalPresentationStyle = UIModalPresentationOverFullScreen;
// navigationController.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
// [self presentViewController:navigationController animated:YES completion:nil];
}
重要
会话列表必须有导航控制器。
会话列表 View Controller 属性
| 属性 | 描述 |
|---|---|
viewModel | 一个 RCChatListViewModel 对象,可能管理和提供视图控制器的数据。 |
headerView | 一个 RCChatListHeaderView 对象,表示视图控制器的导航头部。 |
listView | 一个 RCChatListView 对象,表示视图控制器中的聊天列表。 |
editBar | 一个 RCChatListEditBar 对象,当视图控制器处于编辑模式时显示。 |
会话列表 View Controller 方法
| 方法 | 描述 |
|---|---|
initWithChatType: | 接受一个 RCChatType 作为参数的视图控制器的初始化方法。 |
reloadHeaderView | RCChatListViewController (Header) 类别中的一个方法,用于更新头部视图。如果设置了自定义的头部视图,需要调用此方法刷新界面。 |
reloadListView | RCChatListViewController (List) 类别中的一个方法,用于更新列表视图。如果设置了自定义的列表视图,需要调用此方法刷新界面。 |
editItems | RCChatListViewController (Edit) 类别中的一个方法,返回一个RCChatListEditItem对象的数组。可以重写此方法以实现自定义的编辑操作。 |
定制导航栏
Global IM UIKit 的 RCChatListViewController 使用了系统的导航栏,RCChatListHeaderView 继承于 RCBaseHeaderView,RCBaseHeaderView 具有三个属性:
- 左侧按钮数组:
NSMutableArray<RCBarItem *> *leftItems; - 右侧按钮数组:
NSMutableArray<RCBarItem *> *rightItems; - 标题 View:
RCBarTitleView *titleView;
会话列表页面会根据 RCChatListHeaderView 这三个属性设置系统导航条。
修改导航栏按钮
导航栏按钮由 RCBarItem 配置生成,支持三种按钮形式:文字、图片、自定义视图。点击事件会通过 RCBarItemAction 传递出去,您也可以通过设置 RCBarItemTag 标记按钮。
在 RCChatListHeaderView 中 leftItems 和 rightItems 都是可变数组,支持增删改查。在 leftItems 内置了多选按钮,可以直接访问和修改。
- (void)viewDidLoad {
[super viewDidLoad];
// 添加文字按钮
RCBarItem *addTitleItem = [RCBarItem itemWithTitle:@"Add" image:nil action:^(RCBarItem * item) {
// TODO add item did click
}];
[self.headerView.rightItems addObject:addTitleItem];
[self reloadHeaderView];
}
修改导航栏标题
导航栏标题是 RCChatListHeaderView 中的 titleView 属性,支持展示标题,同时也用于展示连接状态。
标题默认文案是 Chats,支持修改:
- (void)viewDidLoad {
[super viewDidLoad];
// 修改标题
self.headerView.titleView.titleLabel.text = @"Chats";
}
关闭导航栏状态显示
导航栏条状态显示默认开启,可以在会话列表页面展示前关闭:
// 在 `RCChatListViewController` 初始化之前设置
[RCIMKitConfig shared].displayNetStatus = NO;
自定义导航栏
您可以创建继承于 RCChatListHeaderView 的子类,通过重写三个属性 getter/setter 方法自定义导航条。
- (void)viewDidLoad {
[super viewDidLoad];
// 自定义 headerView,DemoChatListHeaderView : RCChatListHeaderView
DemoChatListHeaderView *headerView = [[DemoChatListHeaderView alloc] init];
self.headerView = headerView;
[self reloadHeaderView];
}