概述
本页介绍了适用于 iOS 版 Global IM UIKit 中所有关键函数及其视图控制器的基本概念和通用类。
设计模式
在 Global IM UIKit 中,主要的功能可聚合为两大页面:
-
会话列表页面:采用 MVVM 的代码架构:
- Model 层:
RCChatModel
是对 IMLibCore SDK 中RCConversation
的封装。 - View 层:
RCChatListViewController
视图控制器,根据功能拆分为RCChatListHeaderView
、RCChatListView` 等 UI 组件. - ViewModel 层:
RCChatListViewModel
提供会话数据相关的接口调用和回调,会话的加载、删除、置顶、标记已读等。
- Model 层:
-
会话页面采用 MVVM 的代码架构:
- Model:RCMessageModel 是对 IMLibCore 中 RCMessage 的封装;
- View:RCChatViewController 根据功能拆分为 RCChatHeaderView、RCMessageListView、RCInputBar 等组件;
- ViewModel:RCChatViewModel 提供会话消息数据相关的接口调用和回调,消息的加载、删除、更新等
除此之外,还有很多衍生页面:多媒体、预览、用户列表、用户信息等。
视图控制器
名称 | 视图控制器 |
---|---|
会话列表 | RChatListViewController |
会话页面 | RCChatViewController |
定制化
如果您不想使用 Global IM UIKit 提供的默认视图控制器,您可以继承 Global IM UIKit 的视图控制器,创建一个自定义的视图控制器类。
例如,您可以参考以下示例代码创建一个继承自 RCChatListViewController
的自定义会话列表,并将初始化的实例通过 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];
}
会话列表必须有导航控制器,如果没有控制器,请参考代码示例创建一个。
生命周期
视图控制器的生命周期方法与 Apple 的 UIKit 生命周期方法保持一致。Global IM UIKit 没有实现任何自定义生命周期方法。
UI 模块
在 Global IM UIKit 的设计中,“模块” 是一个抽象概念,一个模块包含多个组件,即模块组件。在 iOS 版 Global IM UIKit 中,每个视图控制器与“模块”合二为一,对应一个页面。
模块 (Module) | 组件 (Component) |
---|---|
RCChatListViewController | - RCChatListHeaderView - RCChatListView |
RCChatViewController | - RCChatHeaderView - RCMessageListView - RCInputBar |
如果您希望使用自定义视图控制器,则必须重写视图控制器的 viewDidLoad
方法,并在调用父类 viewDidLoad
方法之后添加自定义代码。
每个模块组件都具有使用委托和数据源与视图控制器交换视图相关事件和数据的属性。要了解有关数据流和模块定制的更多信 息,请访问模块页。
ViewModel
视图模型直接与 IMLibCore SDK 通信以交换和请求数据。视图控制器无需调用 IMLibCore SDK 接口,只需使用 Global IM UIKit 中的视图模型即可管理和处理聊天相关数据。
每个视图模型都有一个委托,用于将数据更新以事件的形式发送到视图控制器。视图模型还使用数据源从视图控制器收集必要的数据。
Global IM UIKit 提供的所有视图控制器都有相应的视图模型。例如,RCChatListViewController
显示频道列表视图的类拥有 RCChatListViewModel
.
参考下表查看每个关键功能对应的视图控制器和视图模型。
功能 | 视图控制器 | 视图模型 | 代理 /数据源 |
---|---|---|---|
会话列表 | RCChatListViewController | RCChatListViewModel | - RCChatListViewModelDelegate - RCChatListViewModelDataSource |
会话页面 | RCChatViewController | RCChatViewModel | - RCChatViewModelDelegate - RCChatViewModelDataSource |
定制化
如果自定义视图模型的现有事件,您可以重写 Delegate 和 DataSource 中的方法。如果现有方法不满足需求,您可以继承 Delegate 和 DataSource 并提供给 Global IM UIKit 。
您可以在相应的关键功能页面下查看如何自定义每个关键功能中的视图模型。