PrefsMate
PrefsMate 提供了一种优雅的方法来使用属性列表文件(plist 文件)生成 UITableView。同时,您还可以借助其支持配置动作。感谢 Swift 4 中的 Codable 协议,使代码变得完美简洁。
特性
- 数据持久性
- 开关辅助
- 选择动作
- 多节
- 节头/节尾
- 演示项目
- 世界就绪
- 更多自定义单元格
背景
在我们的应用程序中,通常需要在 PrefsViewController(或者可能命名为 SettingsViewController,随意)中创建一个 UITableView。界面可能就像这样:
在实现这类功能时,您内心一定会想:“写这个 UI 真是累死人了!难道有什么可以求助的吗?”
恭喜!你已经来到正确的位置了 :)。
使用
1. 创建一个包含格式化数据的plist文件
以下图为例,格式化的plist文件看起来像这样
每个属性项的含义如下
属性 | 使用 |
---|---|
标题 |
左侧文字 |
detailText |
右侧文字 |
hasDisclosure |
单元格是否具有 disclose 查看 accessory原件 |
hasSwitch |
单元格是否具有开关 |
switchStatus |
开关控件的状态 |
selectActionName |
选择动作的名称(可选) |
switchActionName |
开关动作的名称(可选) |
不要害怕这个长文件。实际上,你只需要做一些可点击的事情。为了方便起见,你甚至可以先复制和粘贴我们的 plist 源代码。
2. 创建表格视图并执行解析工作
let tableView = Mate.createPrefsTableView()
您可以在 viewDidLoad() 中添加解析代码
do {
try Mate.parseWithSource(self, plistUrl: pListUrl) {
tableView.reloadData()
}
} catch {
// Handle with the error
}
3. 如果需要,让您的视图控制器符合 PrefsSupportable 协议
如果您有选择和开关动作需要处理,PrefsSupportable 协议已经为您考虑。
public protocol PrefsSupportable {
/// Return a bunch of switchableItems, including their behavior in SwitchableItemHandler.
var switchableItems: [SwitchActionName: SwitchableItemHandler]? { get }
/// Return a bunch of selectableItems, including their behavior in SelectableItemHandler.
var selectableItems: [SelectActionName: SelectableItemHandler]? { get }
}
以夜间主题的开关为例
var switchableItems: [SwitchActionName : SwitchableItemHandler]? {
return [
"handleThemeMode": { isOn in
print("Dark theme mode is \(isOn)")
}
]
}
var selectableItems: [SelectActionName : SelectableItemHandler]? {
return [
“changeIcon”: {
print(“Handle change icon action here”)
}
...
...
]
}
然后我们就完成了!PrefsMate 会为您做正确的事情。
请注意:字符串 "handleThemeMode" 必须与 plist 文件中
switchActionName
的值相同。对selectActionName
也是如此。
在开关动作中,PrefsMate 已经处理了 数据持久性。因此,您不需要自己存储用户首选项。
您可以参考示例项目了解更多详情。
建议
-
熟悉plist文件结构将非常有帮助。有时您可以直接通过“打开为源代码”编辑plist文件。
-
如果您有问题,请随时告诉我 :)
示例
要运行示例项目,请克隆仓库,并在Example目录下运行pod install
。
(因为这是个新的Pod,您可能需要先运行pod update
。)
所需条件
- Swift 4
- iOS 9 或更高版本
安装
PrefsMate 通过 CocoaPods 提供。要安装它,只需在您的Podfile中添加以下行
pod 'PrefsMate'
联系
许可证
PrefsMate 在MIT许可证下提供。有关更多信息,请参阅LICENSE文件。