IOS – 添加Settings Bundle应用程序首选项到Settings应用程序

iPhone容许应用程序将自定义首选项添加到Settings应用程序中,开发者也能够以编程的方式指定这些设置,但添加到Settings应用程序的方式会提供一个友好的GUI。自定义首选项支持多种多样的数据交互风格,包括文本、密码、开关、滑块、以及二级选择页面。但这里应注意避免敏感信息。数据库

IOS应用程序存储信息的方式主要有三种:

1. 单例类NSUserDefaults:NSUserDefaults类的工做原理相似于NSDictionary,全部首选项都以键/值对的方式存储在NSUserDefaults单例中。编程

2. 设置束(Settings Bundle):提供了一个经过iOS应用程序Settings对应用程序进行配置的接口。api

3. 直接访问文件系统:可以读取属于当前应用程序的iOS文件系统部分的文件。常见的如数据库文件。数组

设置束也是对一个plist文件进行编辑,它的优势在于,能够经过Xcode plist编辑器来操做,无需额外编写代码,只须要在编辑器里定义要存储的数据及其键便可。安全

建立设置首选项菜单的步骤以下:

1.New File…,选择Resource,选择Settings Bundle,建立一个Settings.bundle文件,默认名称便可。建议添加到Supporting Files分组里。编辑器

 

2.打开项目窗口的Settings.bundle项,应该看到Root.plist和en.lproj文件,其中en.lproj是关于设置束国际化的文件,暂时不考虑。打开Root.plist文件,这个文件本质上就是字典,是以键值对来存储和操做的。ide

 

3.Root.plist文件中的节点的类型有:Boolean、Data、Date、Number、String(基本的类型);Dictionary和Array(可以包含其余节点的类型)。字体

4.在Root.plist中设置属性列表的时候要遵循特定格式。咱们可以操做的地方在Preference Items数组(类型为Array)里,请删除或修改此项里面的默认项,若是有的话。正常状况下应爱是有四个子项的分别为分组、输入框、开关、滑块(个人Xcode版本为6.3.2)。但请注意,Preference Items项的(直接)子项只可以是Dictionary类型的。spa

 

设置束中的文件Root.plist决定了应用程序首选项如何呈如今应用程序Settings中。有7种类型的首选项,分别为:设计

 

Text Field:文本框。键为PSTextFieldSpecifier,可编辑的文本字符串。经常使用于保存用户自定义的信息,如昵称等。

Title:标题。键为PSTitleValueSpecifier,只读文本字符串。经常使用于显示不变的信息,如版本信息。

Toggle Switch:开关。键为PSToggleSwitchSpecifier,开关按钮。

Slider:滑块。键为PSSliderSpecifier,取值位于特定范围内的滑块。

Multi value:多值。键为PSMultiValueSpecifier,下拉式列表。

Group:编组。键为PSGroupSpecifier,首选项逻辑编组的标题。经常使用于设置项的分组。

Child Pane:子窗格。键为PSChildPaneSpecifier,子首选项页。经常使用于选项比较多的选择菜单。

 

小窍门:

当前Xcode版本中,能够快速建立各菜单项。单击菜单项的键列,会弹出快捷建立项的菜单。选择想要的类型便可自动建立部分键值对,而后略作修改便可。

 

下面开始介绍各类菜单的用法:

1.Text Field:文本框。文本框可选的键有以下几个:

 

Autocapitalization Style:自动大写。有四个值: None(无)、Sentences(句子首字母大写)、Words(单词首字母大写)、All Characters(全部字母大写)。

Autocorrection Style:自动纠正拼写,若是开启,你输入一个不存在的单词,系统会划红线提示。有三个值:Default(默认)、No Autocorrection(不自动纠正)、Autocorrection(自动纠正)。

Default Value:默认值。注意,包括其余菜单的Default Value,只是默认的值,一旦用户直接或间接更改,Default Value再也不做用,此后显示或获取的都只是用户最新设置的值。

Identifier:设置项标示,用于在程序中获取设置项的值的键Key。

Keyboard Type:键盘样式。有五个值:Alphabet(字母表,默认)、Numbers and Punctuation(数字和标点符号)、Number Pad(数字面板)、URL(比Alphabet多出了.com等域名后缀)、Email Address(比Alphabet多出了“@”符号)。

Text Field Is Secure:是否为安全文本(密码)。若是设置为YES,则内容以圆点符号出现。

Title:提示文本。用于在你的文本框前提示文本框的内容。

Type:设置文本框的话,这个只能选Text Field。

设置完成后,你的文本框项多是这样的:

 

 

2.Title:标题。标题可选的键有以下几个:

 

Default Value:默认值。这个会显示在设置项的右方,灰色字体。

Identifier、Title同上。

Titles和Values:用于指定Default Value的可选值,如分别在Titles和Values下各设置5个值,这时能够指定Default Value为Values里的一个值,这时会在设置里显示Titles里相应的项。Titles和Values中,显示时只显示对应的Title,取值时只获取到对应的Value。注意经过代码修改这个Title对应的Value时,要确认值包含在Values。 注意这里的Titles和Values项,不会在Settings页面中生成一个子级设置页面供选择Value。

Type:设置标题的话,这个只能选Title。

设置完成后,你的标题项多是这样的:

 

 

3.Toggle Switch:开关按钮。开关项可选的键有以下几个:

 

Default Value:默认值。

Identifier、Title同上。

Type:设置开关的话,这个只能选Toggle Switch。

Value for ON和Value for OFF:设置开关状态对应的值。

设置完成后,你的开关项多是这样的:

 

 

4.Slider:滑块。滑块项可选的键有以下几个:

 

Default Value、Identifier同上。

Minimum Value、Maximum Value:最小值和最大值。

Min Value Image Filename、Max Value Image Filename:在滑动条左右显示的图片。图片大小必须为21*21,而且要放在Settings.bundle包内(在Finder里显示包内容,而后粘贴)。

Type:设置滑块的话,这个只能选Slider。

设置完成后,你的滑块项多是这样的:

 

 

5.Multi value:多值。多值项可选的键有以下几个:

 

Default Value:默认值。

Identifier、Title同上。

Type:设置开关的话,这个只能选Multi Value。

Titles和Values:基本同上,但这个多值的Titles和Values会在Settings页面中生成一个子级设置页面供选择Value。

 

6.Group:分组。

若是你要在首选项里面添加分组的话,那么请使用Group:创建一个Preference Items的子项(如:“Item 0”),类型为“Dictionary”,而且包含两个类型为“String”子项,名称分别为:“Type”和“Title”,值分别为:“Group”和“GroupName”(GroupName是你自定义的组名,能够任意的名字)。注意,分组直到遇到下一个同级的指示分组的项结束,或者遇到同级最后一项时结束。

设置完成后,你的fe项多是这样的:

 

 

7.Child Pane:子窗格。这个能够定义一个二级菜单,可选的键有三个:

 

Type:建立子窗格必选Child Pane。

Title:标题,在应用程序首选项菜单中父页显示的标题。

Filename:指定子窗格菜单对应的plist文件,相似于默认的Root.plist。这个项填写时不要带后缀名。另外这个文件要和Root.plist文件放到一块儿。右键Root.plist文件,选择Show in Finder。而后在Finder窗口中右键Root.plist文件选择复制。默认会复制到当前目录下一个Root.plist的副本。接着修改一个有意义的名字便可(这里改为Child.plist)。而后编辑Child.plist文件,右键Child.plist的根项目,选择Property List Type里的iPhone Settings plist。这样再编辑这个文件时,就会有自动提示了。

 

 

Child.plist文件的StringsTable这一项无关紧要,建议保留,并修改键为Strings Filename(和Root.plist中相同),值为其文件名,这里是Child,不要带文件后缀。

 

 

设计设置菜单项就这么多吧。这些Setting的数据将存储在NSUserDefaults中StandardDefaults当中,每一个设置对应的identifier就是Key。而后只须要按NSUserDefaults的操做方式操做设置项就好了。

下面贴出一段获取设置项的代码:

 1 - (void)readingSettingsPreference
 2 {
 3     //获取Settings.bundle路径
 4     NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
 5 
 6     if(!settingsBundle)
 7     {
 8         NSLog(@"找不到Settings.bundle文件");
 9         return;
10     }
11 
12     //读取Settings.bundle里面的配置信息
13     NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
14     NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
15     NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
16 
17     for(NSDictionary *prefSpecification in preferences)
18     {
19         NSString *key = [prefSpecification objectForKey:@"Key"];
20         if(key)
21         {
22             [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
23         }
24     }
25 
26     [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
27 
28     [[NSUserDefaults standardUserDefaults] synchronize];
29 
30     //TODO:读取指定数据
31 
32 }
相关文章
相关标签/搜索