弃用
MatrixKit 将不再受到支持,代码将合并到 Element iOS 仓库中。
请避免在此仓库中创建问题或拉取请求,而是向 Element iOS 报告。
MatrixKit
虽然 MatrixSDK 提供了使用 Matrix 客户端-服务器 API 的 Objective-C API,但 MatrixKit 在 SDK 的基础上提供了一个更高层次、可重用且易于定制的 UI。
简单来说,MatrixKit 是一组 ViewControllers 和 Views。应用开发者可以从这个集合中选取 UI 组件,并将其插入到他们的应用 storyboard 或代码中。最终应用程序控制显示什么。
提供的每个 UI 组件都设计为独立运行。它们之间没有依赖关系。
目前可用的视图控制器有:
- MXKRoomViewController:显示房间消息并允许用户聊天
- MXKRecentListViewController:按最后活动顺序显示用户的房间
- MXKRoomMemberListViewController:显示房间成员列表的页面
即将推出
- 认证视图
- 公开房间:公开房间的列表
- 创建房间
- 通讯录
截图
以下是两个用于显示房间消息的示例


左边的是库存房间控制器。这是由控制台(GitHub)使用的。
右边的是对JSQMessagesViewController的覆盖。显示本身由JSQMessagesViewController管理,但实现使用由MatrixKit组件计算的数据:MXKRoomDataSource & MXKRoomBubbleCellData。下一节将介绍DataSource和celldata的定义。
概览
MatrixKit中所有显示项目列表的ViewController都基于4个组件构建的相同生态系统
- ViewController
- ViewController负责管理显示和用户操作。
- DataSource
为ViewController提供显示的项(CellView对象)。更准确地讲,DataSource从Matrix SDK获取数据(主要是Matrix事件)。它请求CellData对象将数据处理成可读的文本并存储。然后,当ViewController请求cellview时,它将相应的CellData渲染成cellview并返回。
为了方便,MatrixKit中提供的DataSource实现了UITableViewDataSource和UICollectionViewDataSource协议,因此可以直接将这些协议集成到UITableView和UICollectionView的DataSource中。
- CellData
- 包含CellView必须显示的数据。列表中的每个项都有一个CellData对象。这也是一种缓存,以避免每次显示的数据都需要计算。
- CellView
- 这是一个抽象对象。它通常是UITableViewCellView或UICollectionViewCell,但可以是任何UIView。这是ViewController显示的项目视图。
如何在应用程序中使用
安装
您可以使用CocoaPods将MatrixKit嵌入到您的应用程序项目中。最新MatrixKit版本的pod是
pod 'MatrixKit'
用例 #1:显示房间聊天屏幕
假设你有一个存储在 mxSession 中的 MXSession 实例(你可以在 Matrix SDK 教程中了解如何获取 这里)并且你想要在 #matrix:matrix.org 房间中聊天,该房间的 ID 是 !cURbafjkfsMDVwdRDQ:matrix.org。
你需要实例化一个 MXKRoomViewController 并将一个 MXKRoomDataSource 对象附加到它。该对象将管理房间数据。以下代码可以实现这一操作
// Create a data souce for managing data for the targeted room MXKRoomDataSource *roomDataSource = [[MXKRoomDataSource alloc] initWithRoomId:@"!cURbafjkfsMDVwdRDQ:matrix.org" andMatrixSession:mxSession]; // Create the room view controller that will display it MXKRoomViewController *roomViewController = [[MXKRoomViewController alloc] init]; [roomViewController displayRoom:roomDataSource];
然后,你的应用会显示 roomViewController。现在,您的最终用户可以发布消息或图片到房间,浏览历史记录等。
用例 #2:显示用户的房间列表
这个方法与上一个用例类似。你需要创建一个数据源并将其传递给视图控制器
// Create a data source for managing data MXKRecentsDataSource *recentsDataSource = [[MXKRecentsDataSource alloc] initWithMatrixSession:mxSession]; // Create the view controller that will display it MXKRecentListViewController *recentListViewController = [[MXKRecentListViewController alloc] init]; [recentListViewController displayList:recentsDataSource];
定制
本工具包已被设计为开发者可以在不同级别进行定制,包括以下方面:
- ViewController
- 提供的 ViewControllers 可以通过子类化来定制以下点
- DataSource 使用的 CellView 类来渲染 CellData。
- 表格或集合视图的布局。
- 与最终用户的交互。
- CellView
- 开发者可以覆盖 MatrixKit CellViews 以完全更改项目显示方式。注意,CellView 类必须符合 MXKCellRendering 协议。
- CellData
- 开发者可以实现自己的 CellData 类以准备不同渲染的数据。注意,自定义 CellData 类的使用在 DataSource 级别处理(请参阅 registerCellDataClass 方法)。
- DataSource
- 该对象从 Matrix SDK 获取数据,并通过 CellView 和 CellData 对象将其服务于视图控制器。您可以通过重写默认 DataSource 来实现不同的行为。
定制示例
用例 #1: 在聊天室聊天中更改单元
此用例说明了如何实现cellView的定制。
聊天室基本上是一个列表,其中每个条目代表一条消息(或一组消息,如果它们按发件人分组)。在代码中,这些条目是从MXKTableViewCell继承的。如果您对MXKRoomViewController和MXKRoomDataSource使用的默认项不满意,您可以通过在视图控制器中重写MXKDataSourceDelegate方法来更改它们
- (Class<MXKCellRendering>)cellViewClassForCellData:(MXKCellData*)cellData { // Let `MyOwnBubbleTableViewCell` class manage the display of message cells // This class must inherit from UITableViewCell and must conform the `MXKCellRendering` protocol return MyOwnBubbleTableViewCell.class; } - (NSString *)cellReuseIdentifierForCellData:(MXKCellData*)cellData { // Return the `MyOwnBubbleTableViewCell` cell identifier. return @"MyOwnBubbleTableViewCellIdentifier"; }
您可以通过考虑提供的单元格数据来返回一个cellView类。例如,您可以定义不同的类来接收和发送消息。
开发
如果您想通过添加新的ViewControllers、新的视图、新的CellViews或其他改进来帮助改进MatrixKit,该git存储库包含一个用于演示所有可重用UI的示例Xcode项目。请在对develop分支进行修改后,从中发起git pull请求。
由于其依赖项基于CocoaPods,在打开MatrixKit.xcworkspace之前,您需要运行pod install。
贡献者
填充的图标播放、暂停、减号、后退和键盘是从icons8获取的:http://icons8.com/
版权 & 许可证
版权 (c) 2014-2017 OpenMarket Ltd 版权 (c) 2017 Vector Creations Ltd 版权 (c) 2017-2018 New Vector Ltd
本产品遵循Apache License 2.0("许可");除非符合许可条件,否则您不得使用此作品。您可以在LICENSE文件或以下链接中获取许可副本:
https://apache.ac.cn/licenses/LICENSE2.0
除非适用法律法规要求或经书面同意,否则在本许可下分发的软件按“现状”分发,不提供任何形式(明示或暗示)的保证或条件。有关许可授权和限制的具体语言,请参阅许可。