最近在工作中接触到IM类的需求,经过比较公司选择了网易云信,示例Demo可以在官网下载 https://netease.im/im-demo。 我对网易云信中的UI部分作了架构整理,首先,我们先看下整体的设计
NIMSessionViewController
是聊天界面的视图控制器,主要由 NIMSessionInteractor
(交互类)和 NIMSessionTableAdapter
(table适配器)两部分构成。
NIMSessionInteractor
1, NIMSessionDataSource
中的 主要负责数据源的获取,增,删,改,查等操作,通过NIMSessionMsgDatasource
在下拉加载数据和初次加载历史数据时,通过询问是否有MessageProvider
,如果有MessageProvider
,就从 MessageProvider
中获取数据,如果没有MessageProvider
就通过NIMSDK
获取NIMMessage
数据,这种设计方式特别的灵活,给自定义获取数据源提供了很大的便利性。
2,NIMSessionLayout
主要负责视图布局,在示例Demo中,UI视图主要由3部分组成NIMInputView
,UITableView
,UIRefreshControl
.外界通过update:
,adjustTableView
,adjustInputView
等方法控制视图显示。
3,NIMSessioninteractorDelegate
提供数据操作完成后的一系列回调。
4, NIMSessioninteractor
提供网络接口,界面操作接口,数据接口,排版接口,按钮响应接口,页面状态同步接口。
NIMSessionTableAdapter
tableAdapter主要由 NIMMessageCellFactory
(cell生成器)和 NIMSessioninteractor
组成,将 NIMMessageCell
和交互事件绑定在一起。
1.1,NIMMessageCellFactory
通过cellInTable:tableView:forMessageModel
得到NIMMessageCell
(所有cell的父类)。
1.2,所有的自定义cell,通过在定义 NIMMessageCell
的contentView
实现的,通过重写initSessionMessageContentView
来获取各种自定义的cell展示
1.3,NIMMessageCell
作为基类,主要负责基础的信息展示比如:重试按钮,旋转loading,用户信息,背景色等展示。
以上就是我在网易云信UIDemo 中的所得,整体看下来,各个类的功能和作用比较清晰明了,架构分层非常清晰,将一类功能和操作分散到各个类中,各司其职,在使用过程中,按照功能进行组装即刻,也有利于UI扩展和功能扩展。
感觉不错的话,请给个👍吧,😁😁😁