iOS 自定义应用设置页面
iOS 自定义应用设置页面
引言
我们知道,当安装了一个 iOS 应用程序后,在系统的设置中,就会为此应用生成一个单独的设置模块,可以在其中控制应用的网络权限、推送权限等系统设置项。除了系统功能的相关设置外,其实应用程序也有许多自身设置的需求,例如应用缓存数据的设置、应用主题的设置以及用户账户的设置等。通常,应用自身的设置会由开发者自行开发,在应用内提供页面来承载,这使得应用的设置被割裂成了两部分。其实,iOS 系统的设置页面也提供了不同应用进行定制的能力,例如系统的 Safari 浏览器应用,其设置页面如下:
本篇文章将讨论应用自定义系统设置页面的技术细节,某些场景下,将应用设置项合并入系统设置可以提供给用户更一致的使用体验。
从一个小示例开始
应用本身设置项的配置需要定义在一个 plist 文件中。在项目中可以直接新建一个 Settings Bundle 文件,如下:
生成的 Bundle 中包含一个国际化文件和一个 Root.plist 文件,国际化的文件我们暂不关心,其用来根据用户本地的语言环境来映射不同语言的字符串。Root.plist 文件是配置设置项的核心文件。其内容如下:
模版中默认定义了 4 个 item,分别用来显示一个分组头、输入框、开关和滑块组件。效果如下:
每个配置项的意义和用法,我们后续在详细介绍。可以看到,通过 Plist 文件的配置,我们可以在设置页面中添加许多可用户交互的组件。要读取用户设置情况也非常简单,只需要读取此 Bundle 文件中的 Root.plist 文件即可,例如:
需要注意,Plist 文件中的键与在 Xcode 中看到的键值并不一致,Xcode 对键值进行了可读化,你可以以文件的方式查看,即可看到真正的键名,例如上面的设置文件内容为:
Plist 文件配置项详解
Root.plist 文件最外层可配置键
- PreferenceSpecifiers
此键是必须的,设置为一个数组,数组中每个具体的元素即是配置设置项的每一项。数组的顺序会决定设置项的排序。
- StringsTable
设置用来进行语言本地化的文件名。
- ApplicationGroupContainerIdentifier
用来设置 Group 标识,用来在小组件等扩展中访问此设置。
配置的核心是 PreferenceSpecifiers,其配置的数组中的元素根据不同的 type 会渲染不同的组件,能支持的类型包括如下几种:
1. PSTextFieldSpecifier:文本输入框。
2.PSTitleValueSpecifier: 只读的标题,只能用来显示信息。
3.PSToggleSwitchSpecifier:开关。
3.PSSliderSpecifier:滑块。
4.PSMultiValueSpecifier:多选列表,点击后会跳转到一个新的页面,其中提供一组选项供选择。
5.PSGroupSpecifier:分组,用来对选项进行分组,此处可以理解为分组的分割线,能够设置标题。
6.PSRadioGroupSpecifier: 此类型也用来设置选则列表,与 PSMultiValueSpecifier 不同的是其不会跳转到新的页面,而是直接在当前页面展示列表。
7.PSChildPaneSpecifier: 此类型用来设置一个子页面,其可以配置另一个 Plist 文件来展示子页面的选项。
下面将逐一对这些类型进行介绍。
PSGroupSpecifier
用来渲染一个分组,可配置字段:
Title
设置分组标题。
FooterText
设置尾部文案。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
配置效果:
PSChildPaneSpecifier
Title
设置标题。
File
子设置页面 Plist 文件名。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
PSRadioGroupSpecifier
直接展开的选择列表。
Title
设置标题。
FooterText
设置尾部文案。
Key
唯一标识。
DefaultValue
默认的选中项。
Values
一组选项的值。
Titles
一组选项显示的标题。
- DisplaySortedByTitle
布尔值,选项是否根据标题进行排序。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
配置效果:
PSMultiValueSpecifier
Title
设置标题。
Key
唯一标识。
DefaultValue
默认的选中项。
Values
一组选项的值。
Titles
一组选项显示的标题。
- ShortTitles
配置一组短标题,设置后会显示短标题,点击后进入新的页面展示长内容。
- DisplaySortedByTitle
布尔值,选项是否根据标题进行排序。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
PSTextFieldSpecifier
文本输入框。
Title
设置标题。
Key
唯一标识。
DefaultValue
默认的值。
- IsSecure
是否加密。
- KeyboardType
弹出的键盘类型。
- AutocapitalizationType
自动大小写模式。
- AutocorrectionType
自动拼写纠正。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
PSTitleValueSpecifier
Title
设置标题。
Key
唯一标识。
DefaultValue
显示的值。
Values
存储在数据库中的一组值。
Titles
存储在数据库中的一组 key。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
PSSliderSpecifier
Key
唯一标识。
DefaultValue
默认值。
MinimumValue
滑块的最小值。
MaximumValue
滑块的最大值。
MinmumValueImage
最小值一侧显示的图片。
MaximumValueImage
最大值一侧显示的图片。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
PSToggleSwitchSpecifier
Title
设置标题。
Key
唯一标识。
DefaultValue
默认开关状态。
TrueValue
开关开启时绑定的值,不会显示。
FalseValue
开关关闭时绑定的值,不会显示。
- SupportedUserInterfaceIdioms
设置只在某些设备上显示,例如”iPhone“
版权声明: 本文为 InfoQ 作者【珲少】的原创文章。
原文链接:【http://xie.infoq.cn/article/a41925a7ea53517affa8d942b】。文章转载请联系作者。
评论