会话页面
会话页面即应用程序中的聊天页面,主要由消息列表和输入区两部分组成。
IMKit 提供基于 UIKit UIViewController
类实现的会话页面类 RCConversationViewController
。
聊天界面
聊天界面一般由三个部分组成:标题栏、消息列表、输入区域。
IMKit 默认会话页面 RCConversationViewController
未包含标题栏的实现,您需要自行设置会话标题。
初始化
- 基于 IMKit 开发时,推荐继承
RCConversationViewController
类,创建自定义的会话页面。 - 在排查或复现与会话页面相关的问题时,可以直接使用
RCConversationViewController
类来验证是否是因为继承重写的原因引起的问题。
您可以调用 RCConversationViewController
类的初始化方法构建会话页面,设置 conversationType
和 targetId
的值来创建一个单聊会话或群聊会话页面。
参数说明
参数 | 类型 | 说明 |
---|---|---|
conversationType | RCConversationType | 会话类型 |
targetId | NSString | 会话 ID |
示例代码
if (self.navigationController) {
RCConversationViewController *conversationVC = [[RCConversationViewController alloc] initWithConversationType:conversationType targetId:targetId];
[self presentViewController:navigationController animated:YES completion:nil];
}
组件拆分
在 RCConversationViewController
类中,会话页面主要由三个部分组成:
属性 | 类型 | 说明 |
---|---|---|
navigationBar | UINavigationBar | iOS 系统的导航栏 |
conversationMessageCollectionView | RCBaseCollectionView | 消息列表 |
chatSessionInputBarControl | RCChatSessionInputBarControl | 输入区域 |
标题栏
IMKit 的 RCConversationViewController
使用了系统的导航栏,可用于显示会话的标题,例如在群聊时显示群组名称,在一对一聊天中显示另一个用户的名称。您可以自行通过 UIViewController
的 title
属性设置标题。
开启输入状态功能后,在单聊会话中对方正在输入时,标题栏会被 SDK 修改为对方的输入状态。在搜索时,IMKit 会设置 UINavigationItem
的 titleView
。
标题栏组件左侧提供一个按钮,当点击左按钮时,会调用 leftBarButtonItemPressed
方法退出当前页面,应用程序可以重写该方法。标题栏右侧默认无按钮,您可以在自定义页面上添加按钮。您可以参考 SealTalk 源码中 RCDChatViewController.m 中的 rightBarButtonItemClicked
方法。
消息列表
IMKit 的 RCConversationViewController
的消息列表按时间顺序显示所有消息。
消息列表的视图是在各类型消息的展示模板中创建和自定义的,分别使用了 RCTextMessageCell
、RCFileMessageCell
、RCImageMessageCell
等继承自 RCMessageCell
的类来显示会话中不同类型的消息。
您可以在页面提供的回调方法中自定义列表视图中的每个项目,或者重写 registerCustomCellsAndMessages
方法,在其中调用 registerClass:(Class)cellClass forMessageClass:(Class)messageClass;
方法注册自定义的消息展示模板。详情参考自定义消息
参数说明
属性 | 类型 | 说明 |
---|---|---|
conversationMessageCollectionView | RCBaseCollectionView | 消息列表 |
conversationDataRepository | NSMutableArray | 数据源中存放的元素为聊天页面中消息 Cell 的数据模型,即 RCMessageModel 对象。 |
要了解与消息列 表有关的事件,请转到 页面事件监听。
输入组件
RCChatSessionInputBarControl
是 IMKit 的消息输入组件,用户可以在其中键入和发送消息,支持文本、文件、语音、图像、视频等消息类型。输入区域的视图是在 RCChatSessionInputBarControl 中创建和控制的。
IMKit 已在 RCConversationViewController
中提供了部分输入组件相关的事件回调。详情参考输入区域
定制化
您可以通过修改 IMKit 全局配置和 RCConversationViewController
来自定义聊天页面。
在开始定制化之前,建议您首先继承 SDK 内置会话页面 RCConversationViewController
,创建并实现自己的会话页面 View Controller。
示例代码
#import <RongIMKit/RongIMKit.h>
@interface RCDChatViewController : RCConversationViewController
@property (nonatomic, assign) BOOL needPopToRootView;
@end
会话页面中部分样式与行为受 IMKit 全局配置影响。如需了解全局配置,参见 配置指南。