写点什么

iOS 自定义应用设置页面

作者:珲少
  • 2024-03-24
    上海
  • 本文字数:2185 字

    阅读完需:约 7 分钟

iOS 自定义应用设置页面

引言

我们知道,当安装了一个 iOS 应用程序后,在系统的设置中,就会为此应用生成一个单独的设置模块,可以在其中控制应用的网络权限、推送权限等系统设置项。除了系统功能的相关设置外,其实应用程序也有许多自身设置的需求,例如应用缓存数据的设置、应用主题的设置以及用户账户的设置等。通常,应用自身的设置会由开发者自行开发,在应用内提供页面来承载,这使得应用的设置被割裂成了两部分。其实,iOS 系统的设置页面也提供了不同应用进行定制的能力,例如系统的 Safari 浏览器应用,其设置页面如下:



本篇文章将讨论应用自定义系统设置页面的技术细节,某些场景下,将应用设置项合并入系统设置可以提供给用户更一致的使用体验。

从一个小示例开始

应用本身设置项的配置需要定义在一个 plist 文件中。在项目中可以直接新建一个 Settings Bundle 文件,如下:



生成的 Bundle 中包含一个国际化文件和一个 Root.plist 文件,国际化的文件我们暂不关心,其用来根据用户本地的语言环境来映射不同语言的字符串。Root.plist 文件是配置设置项的核心文件。其内容如下:



模版中默认定义了 4 个 item,分别用来显示一个分组头、输入框、开关和滑块组件。效果如下:



每个配置项的意义和用法,我们后续在详细介绍。可以看到,通过 Plist 文件的配置,我们可以在设置页面中添加许多可用户交互的组件。要读取用户设置情况也非常简单,只需要读取此 Bundle 文件中的 Root.plist 文件即可,例如:


let path = Bundle.main.path(forResource: "Settings", ofType: "bundle")let settings = NSDictionary(contentsOfFile: path!.appending("/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“

发布于: 刚刚阅读数: 5
用户头像

珲少

关注

还未添加个人签名 2022-07-26 加入

还未添加个人简介

评论

发布
暂无评论
iOS自定义应用设置页面_珲少_InfoQ写作社区