MatrixKit 0.16.11

MatrixKit 0.16.11

测试已测试
Lang语言 Obj-CObjective C
许可证 Apache-2.0
发布最后发布2021年12月

由以下人员维护:Emmanuel ROHEEGiomismailgulekSteve BarreDavid LangleyStefan CeriuDoug



 
相关依赖
MatrixSDK= 0.20.13
HPGrowingTextView~> 1.1
libPhoneNumber-iOS~> 0.9.13
DTCoreText~> 1.6.25
向下~> 0.11.0
 

MatrixKit 0.16.11

弃用

MatrixKit 将不再受到支持,代码将合并到 Element iOS 仓库中。

请避免在此仓库中创建问题或拉取请求,而是向 Element iOS 报告。

MatrixKit

虽然 MatrixSDK 提供了使用 Matrix 客户端-服务器 API 的 Objective-C API,但 MatrixKit 在 SDK 的基础上提供了一个更高层次、可重用且易于定制的 UI。

简单来说,MatrixKit 是一组 ViewControllers 和 Views。应用开发者可以从这个集合中选取 UI 组件,并将其插入到他们的应用 storyboard 或代码中。最终应用程序控制显示什么。

提供的每个 UI 组件都设计为独立运行。它们之间没有依赖关系。

目前可用的视图控制器有:

  • MXKRoomViewController:显示房间消息并允许用户聊天
  • MXKRecentListViewController:按最后活动顺序显示用户的房间
  • MXKRoomMemberListViewController:显示房间成员列表的页面

即将推出

  • 认证视图
  • 公开房间:公开房间的列表
  • 创建房间
  • 通讯录

截图

以下是两个用于显示房间消息的示例

https://raw.githubusercontent.com/matrix-org/matrix-ios-kit/develop/Screenshots/MXKRoomViewController-w240.jpeg https://raw.githubusercontent.com/matrix-org/matrix-ios-kit/develop/Screenshots/MXKJSQMessagesViewController-w240.jpeg

左边的是库存房间控制器。这是由控制台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

除非适用法律法规要求或经书面同意,否则在本许可下分发的软件按“现状”分发,不提供任何形式(明示或暗示)的保证或条件。有关许可授权和限制的具体语言,请参阅许可。