搜索我的群组页面
搜索我的群组页面用于检索当前用户加入的群组。进入该页面,在输入框输入关键字,SDK 就会从数据库中拉取群组信息。IMKit 提供基于 UITableView
的搜索页面类 RCSearchGroupsViewController
。
搜索我的群组页面
搜索我的群组页面一般由导航栏,搜索栏和群组列表三部分部分组成。
初始化
调用 RCSearchGroupsViewController
类的初始化方法构建搜索群组页面。注意,您需要创建一个 RCSearchGroupsViewModel
对象, 作为RCSearchGroupsViewController
的业务逻辑处理模块。
RCSearchGroupsViewModel *viewModel = [[RCSearchGroupsViewModel alloc] init];
RCSearchGroupsViewController *vc = [[RCSearchGroupsViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
参数 | 类型 | 说明 |
---|---|---|
viewModel | RCSearchGroupsViewModel | RCSearchGroupsViewController 的业务逻辑处理模块。 处理页面UI的配置以及群组信息的拉取。 |
定制化
IMKit 搜索群组界面的样式可供自定义修改。
标题栏
IMKit 的 RCSearchGroupsViewController
使用了系统的导航栏,可用于显示页面的标题,用户通过继承RCSearchGroupsViewController
,在 viewDidLoad
方法中通过 title
属性设置标题。
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"新标题"
}
搜索框
RCSearchGroupsViewController
默认按照群组名称搜索群组,通过设置 RCSearchGroupsViewModel
的 delegate
属性, 实现相关代理方法,自定义搜索功能。
RCSearchGroupsViewModel *viewModel = [[RCSearchGroupsViewModel alloc] init];
viewModel.delegate = self;
RCSearchGroupsViewController *vc = [[RCSearchGroupsViewController alloc] initWithViewModel:viewModel];
[self.navigationController pushViewController:vc animated:YES];
...
/// 配置自定义的搜索功能
- (RCSearchBarViewModel *_Nullable)willConfigureSearchBarViewModelForSearchGroupsViewModel:(RCSearchGroupsViewModel *_Nonnull)viewModel{
//返回自定义的搜索 ViewModel
}
...
自定义 Cell
1. 自定义 RCCustomCell
@interface RCCustomCell : RCFriendListPermanentCell
- (void)showPortrait:(NSString *)url;
@end
@implementation
// Cell 绘制
@end
2.自定义 RCCustomCellViewModel
提示
RCGroupInfoCellViewModel 可以Cell的创建, 自定义 CellViewModel 需要继承该类
@interface RCCustomCellViewModel: RCGroupInfoCellViewModel
@property (nonatomic, strong) RCGroupInfo *groupInfo;
/// 初始化
/// - Parameters:
/// - groupInfo: 群组信息
/// - keyword: 高亮关键字
- (instancetype)initWithGroupInfo:(RCGroupInfo *)groupInfo
keyword:(NSString *)keyword;
@end
@end
// 注册并自定义cell
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdentifier = @"RCCustomCellIdentifier";
// 注册 cell
[tableView registerClass:RCCustomCell.class forCellReuseIdentifier:cellIdentifier];
// 返回 cell
RCCustomCellViewModel *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
}
//修改UI
...
return cell;
}
@end
3. 修改数据源
实现代理方法:
// 好友数据源
- (NSArray *_Nullable)searchGroupsViewModel:(RCSearchGroupsViewModel *_Nonnull)viewModel
willLoadItemsInDataSource:(NSArray *_Nullable)dataSource {
// 对数据源增删改处理
NSMutableArray *list = dataSource.mutableCopy;
RCCustomCellViewModel *customCellVM = [[RCCustomCellViewModel alloc] initWithGroupInfo:"group" keyword:"关键字"];
[list addObject:@[customCellVM]];
return list;
}
5.点击 cell
/// 用户点击Cell事件
/// - Parameters:
/// - viewModel: viewModel
/// - viewController: viewController
/// - tableView: tableView
/// - indexPath: indexPath
/// - viewModel: CellViewModel
/// - Returns: App是否处理[YES : SDK不再处理, NO: SDK处理]
///
/// - Since: 5.12.2
- (BOOL)searchGroupsViewModel:(RCSearchGroupsViewModel *_Nonnull)viewModel
viewController:(UIViewController*_Nonnull)viewController
tableView:(UITableView *_Nonnull)tableView
didSelectRow:(NSIndexPath *_Nonnull)indexPath
cellViewModel:(RCBaseCellViewModel *_Nonnull)cellViewModel {
}