QMUI_iOS中的设置页面:快速构建应用设置界面
在iOS应用开发中,设置页面是用户与应用交互的重要窗口。QMUI_iOS框架提供了强大的静态表格视图组件,帮助开发者快速构建美观、高效的设置界面。本文将详细介绍如何利用QMUI_iOS的QMUIStaticTableViewCellData、QMUIStaticTableViewCellDataSource和QMUICommonTableViewController等核心类,从零开始搭建一个功能完善的设置页面。
核心组件介绍
QMUI_iOS的设置页面构建主要依赖以下几个核心组件:
- QMUICommonTableViewController:封装了常见的表格视图控制器功能,支持搜索栏集成、空视图显示等特性,是构建设置页面的基础。
- QMUIStaticTableViewCellData:存储静态表格中一行的信息,包括文字、图片、 accessory 类型等。
- QMUIStaticTableViewCellDataSource:管理静态表格的数据源,负责将
QMUIStaticTableViewCellData对象转换为表格视图可显示的单元格。
这些组件的协作流程如下:
QMUICommonTableViewController
QMUICommonTableViewController是所有表格视图控制器的基类,提供了许多开箱即用的功能。通过继承该类,开发者可以快速获得一个配置完善的表格视图。
核心功能:
- 集成
QMUISearchController,支持搜索功能 - 自动生成统一样式的 section header/footer
- 内置
QMUIEmptyView,支持加载、空数据、错误状态显示
相关文件:QMUIKit/QMUIMainFrame/QMUICommonTableViewController.h
QMUIStaticTableViewCellData
QMUIStaticTableViewCellData是静态表格的核心数据模型,每个实例代表表格中的一行。它支持多种 accessory 类型,如开关、箭头、详情按钮等,满足设置页面的多样化需求。
主要属性:
text:单元格主文本detailText:单元格详情文本image:左侧图标accessoryType:右侧 accessory 类型accessoryValueObject:accessory 类型对应的值(如开关状态)
相关文件:QMUIKit/QMUIComponents/StaticTableView/QMUIStaticTableViewCellData.h
QMUIStaticTableViewCellDataSource
QMUIStaticTableViewCellDataSource是连接数据模型和表格视图的桥梁。它接收一个QMUIStaticTableViewCellData对象的二维数组(分 section),并负责将其转换为表格视图可显示的内容。
主要功能:
- 管理表格的数据源
cellDataSections - 自动处理单元格的创建、高度计算
- 响应单元格的点击事件
相关文件:QMUIKit/QMUIComponents/StaticTableView/QMUIStaticTableViewCellDataSource.h
快速上手:构建第一个设置页面
下面我们将通过一个实际示例,展示如何使用QMUI_iOS的静态表格组件构建一个设置页面。
步骤1:创建设置页面控制器
首先,创建一个继承自QMUICommonTableViewController的类,例如SettingsViewController。
#import "QMUICommonTableViewController.h"
@interface SettingsViewController : QMUICommonTableViewController
@end
步骤2:初始化数据源
在viewDidLoad方法中,初始化QMUIStaticTableViewCellDataSource并设置为表格视图的数据源。
- (void)viewDidLoad {
[super viewDidLoad];
// 初始化单元格数据
NSArray *cellDataSections = [self createCellDataSections];
// 创建数据源
QMUIStaticTableViewCellDataSource *dataSource = [[QMUIStaticTableViewCellDataSource alloc] initWithCellDataSections:cellDataSections];
// 设置表格数据源
self.tableView.qmui_staticCellDataSource = dataSource;
}
步骤3:创建单元格数据
实现createCellDataSections方法,创建包含QMUIStaticTableViewCellData对象的二维数组。
- (NSArray *)createCellDataSections {
// 第一组:账户设置
QMUIStaticTableViewCellData *profileCell = [QMUIStaticTableViewCellData staticTableViewCellDataWithIdentifier:1
image:[UIImage imageNamed:@"profile"]
text:@"个人资料"
detailText:@"点击编辑"
didSelectTarget:self
didSelectAction:@selector(profileCellDidTap:)
accessoryType:QMUIStaticTableViewCellAccessoryTypeDisclosureIndicator];
// 第二组:通用设置
QMUIStaticTableViewCellData *notificationCell = [QMUIStaticTableViewCellData staticTableViewCellDataWithIdentifier:2
image:[UIImage imageNamed:@"notification"]
text:@"通知设置"
detailText:nil
didSelectTarget:self
didSelectAction:@selector(notificationCellDidTap:)
accessoryType:QMUIStaticTableViewCellAccessoryTypeDisclosureIndicator];
QMUIStaticTableViewCellData *darkModeCell = [QMUIStaticTableViewCellData staticTableViewCellDataWithIdentifier:3
image:[UIImage imageNamed:@"darkmode"]
text:@"深色模式"
detailText:nil
didSelectTarget:self
didSelectAction:nil
accessoryType:QMUIStaticTableViewCellAccessoryTypeSwitch];
darkModeCell.accessoryValueObject = @YES;
darkModeCell.accessorySwitchBlock = ^(UITableView *tableView, QMUIStaticTableViewCellData *cellData, UISwitch *switcher) {
NSLog(@"深色模式切换: %@", switcher.on ? @"开启" : @"关闭");
};
return @[
@[profileCell], // 第一组
@[notificationCell, darkModeCell] // 第二组
];
}
步骤4:处理单元格事件
实现单元格点击事件的处理方法:
- (void)profileCellDidTap:(QMUIStaticTableViewCellData *)cellData {
// 跳转到个人资料页面
}
- (void)notificationCellDidTap:(QMUIStaticTableViewCellData *)cellData {
// 跳转到通知设置页面
}
高级功能
动态更新单元格
QMUI_iOS的静态表格支持动态更新单元格内容,只需修改QMUIStaticTableViewCellData对象的属性,表格视图会自动刷新。
// 更新单元格文本
QMUIStaticTableViewCellData *cellData = [self.tableView.qmui_staticCellDataSource cellDataAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
cellData.text = @"新的文本";
// 或者直接修改数据源数组
NSMutableArray *mutableSections = [self.tableView.qmui_staticCellDataSource.cellDataSections mutableCopy];
// 修改...
self.tableView.qmui_staticCellDataSource.cellDataSections = mutableSections;
自定义单元格样式
如果默认的单元格样式无法满足需求,可以通过cellClass属性自定义单元格类:
QMUIStaticTableViewCellData *customCell = [[QMUIStaticTableViewCellData alloc] init];
customCell.cellClass = [CustomTableViewCell class];
customCell.style = UITableViewCellStyleDefault;
相关文件:QMUIKit/QMUIComponents/StaticTableView/QMUIStaticTableViewCellData.h
使用Switch Accessory
QMUIStaticTableViewCellAccessoryTypeSwitch是设置页面常用的 accessory 类型,用于开关类设置。通过accessorySwitchBlock可以监听开关状态变化:
cellData.accessoryType = QMUIStaticTableViewCellAccessoryTypeSwitch;
cellData.accessoryValueObject = @YES; // 初始状态
cellData.accessorySwitchBlock = ^(UITableView *tableView, QMUIStaticTableViewCellData *cellData, UISwitch *switcher) {
NSLog(@"开关状态: %@", switcher.on ? @"开" : @"关");
// 保存开关状态
};
实际应用示例
QMUI_iOS框架内部就有很多使用静态表格的例子,例如日志管理页面:
// QMUILogManagerViewController.m
NSMutableArray<NSArray<QMUIStaticTableViewCellData *> *> *cellDataSections = [[NSMutableArray alloc] init];
NSMutableArray<QMUIStaticTableViewCellData *> *currentSection = nil;
// 添加单元格数据...
QMUIStaticTableViewCellDataSource *dataSource = [[QMUIStaticTableViewCellDataSource alloc] initWithCellDataSections:cellDataSections];
self.tableView.qmui_staticCellDataSource = dataSource;
相关文件:QMUIKit/QMUIComponents/QMUILogManagerViewController.m
总结
QMUI_iOS的静态表格组件为设置页面开发提供了一站式解决方案,通过QMUICommonTableViewController、QMUIStaticTableViewCellData和QMUIStaticTableViewCellDataSource的配合,开发者可以快速构建出功能完善、样式统一的设置界面。
主要优势:
- 减少重复代码,提高开发效率
- 统一的视觉风格,符合设计规范
- 丰富的交互支持,满足多样化需求
- 易于维护和扩展
通过本文的介绍,相信你已经掌握了QMUI_iOS静态表格的基本使用方法。更多高级特性和最佳实践,可参考QMUI_iOS的官方文档和示例代码。
相关资源:
- 官方文档:README.md
- 静态表格组件:QMUIKit/QMUIComponents/StaticTableView/
- 示例代码:QMUIKit/QMUIComponents/QMUILogManagerViewController.m
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



