iOS开发--应用设置及用户默认设置 【1、bundle的运用】

在iphone里面,应用都会在“设置”里面有个专属的应用设置,选择该菜单界面,用户便可以在其中输入和更改各种选项,协助用户更便捷设置个人喜好与习惯。

在这一节中,希望能通过对捆绑包(bundle)的介绍以及plist文件等的运用,探讨用户默认机制中,应用设置的开发与调用。

【本次开发环境: Xcode:7.2     iOS Simulator:iphone6S plus   By:啊左】

一、设置捆绑包(bundle)介绍与界面展示

设置捆绑包(bundle)是应用自带的一组文件,用户可以通过它进行输入与更改应用的偏好设置。例如【图1】,最底下就是开发的命名为:“应用设置”的app应用。

【图1  设置应用界面】

设置应用充当着ios用户默认设置(User Ddefault)机制的通用用户界面的角色。用户默认设置是保存和获取偏好设置的系统的一部分。在ios应用中,用户默认设置由NSUserDefaults类实现(同样,在mac中,也是通过这个类来保存和读取偏好设置的)。

NSUserDefaults与NSDictinary?

应用通过NSUserDefaults用键值对的方式来读取和保存偏好设置数据,与通过键从NSDictionary对象中获取数据一样,不同之处在于NSUserDefaults中的数据会被持久保存到文件系统中,而不是存储到内存中的对象实例中。

本节将通过开发一个应用,添加并配置一个bundle包。  然后从应用访问并且编辑这些偏好设置,以及从系统偏好设置中编辑,使app控件数据发生变化。

在这个过程,进行数据同步与更新。

设置界面【图2】如下:

【图2  应用设置界面 】(此app名称就叫“应用设置”。。 其中,More为最后一个选项的子视图)

app 应用的界面【图3】如下:

【图3 app应用界面】

所以,就开始创建项目吧~~


二、创建boundle包

1、首先通过下面这个图标创建一个叫“应用设置”的项目,记得将Devices勾选为iphone或是universal,取消勾选Use CoreData。

2、创建bundle捆绑包:

点击“应用设置”文件夹,然后从左上角选择File->New->File,选择ios部分中的Resource,选择设置Bundle图标(参见图4 )点击Next,名字保留默认的Settings,点击Create。

【图4  创建bundle包】

此时可以看到这样的一个“Setting.bundle”捆绑包

,展开.bundle设置,能看到"en.Iproj"这个文件夹,主要用与本地化应用,本文不讨论本地化应用这个内容,主要介绍Root.plist。

3、设置属性列表

点击Root.plist,查看编辑器窗口,可以看到Xcode的属性列表编辑器(参见图5),

【图5 属性列表  上面  Key:键    Type:类型    Value:值】

如果你的编辑窗口与图看起来不一样,右键空白处,在弹出的菜单中选择:"Show Raw Keys/Values"。如下图:

【注意:本文讨论的属性列表plist文件中的图片,都是以"Show Raw Keys/Values"

【图6Show Raw Keys/Values

查看plist中各项组织结构。属性列表本质上就是字典。在存储的各个条目的类型与值,都要通过特定的键key来检索他们,这种使用方法与NSDictionaryBoolean、Data、Date、Number、String可以保存数据;另外,除了Dictionary也可以做为保存字典的节点外,还有Array节点,也是可以储存含有其他节点的有序列表。其中,其中Dictionary和Array是唯一能够包含其他节点的属性列表节点类型。

(注:虽然平时用的NSDictionary可以使用大多数对象做为键,但属性列表中的Dictionary节点中键必须为字符串类型的,但是可以选择任意节点类型做为该键的值。)

下面介绍Root.plist中各项的设置与编辑

其中可以看到StringsTable这个条目,用于将应用转换为另一种语言,本文不会使用到它,但是也可以留着,虽然没有多大用。。

除了StringsTable,属性列表还有一个名为“PreferenceSpecifiers”的节点,是一个数组,这个数组节点保存的一组Dictionary节点,每个Dictionary节点都代表着用户可修改的一个偏好设置项或用户可以访问的一个设置页面的子视图。

你会注意到这个属性列表模板中,有4个Item节点,在本应用中没有实际作用,所以分别点击Item1到

3,按delet依次删除它们,只留下Item0。

(技巧:要在属性列表中选择一项,最好是单击Key列的一端或者另一端,否则容易打开Key列的下拉菜单。)

点击Item0左边的三角形展开, 可以看到2行数据。其中Type键的值PSGroupSpecifier说明该条目是一个新分组的开始,紧跟其后的每个条目都会是此分组的一部分,直到有个新的Type键的值为PSGroupSpecifier才开始另一个分组。因此在PSGroupSpecifier中的Item0在属性列表中必须始终为PSGroupSpecifier类型,这样确保每个设置列表中都会至少有一个分组存在。

Item0中的Title键,用与设置这个组上的标题。后面我们可以在系统设置上面看到。

仔细观察Item0(Group - Group)中,第一个Group代表Type项的值,第二个Group代表Titile项的值。这是Xcode有助于只管观察捆绑包内容的便捷方式。

我们将Item0中的Title将它从Group改为Group Info。

下面我们在设置中添加一个让用户输入账号和密码的2个文本框。

首先点击Item0左边展开的三角形,使它关闭,然后选择Item0按下return键。

此时添加了一个新的与Item0的同级行,出现一个下拉菜单【图7】,显示默认值TextField。选择TextField,让菜单消失。

【图7 】

展开Item1,可以看到如【图8】,把它的标题Title键的值改为zhanghao(用于显示在设置中),Key键的值改为ZH(做为我们获取和编辑这个文本框的键,工作方式与Dictionary相似)

【图8】


在Item的最后一行,也就是Key这行,按下return键添加一个新行,将其键设置为AutocapitalizationType,并且点击这一行最右边的选择项

,选择Words(表示文本框用户输入本文本框时,自动将每个单词改成首字母大写),也可以自己输入。

同理,添加AutocorrectionType选择No(表示不会自动更正输入到该文本框中的值

),也可以自己输入。

(记住标题是用来显示在设置屏幕上面的;键是用来存储值的;)

【图9】

接下来添加密码这一文本框栏,可以通过添加Item1的方法,添加Item2条目,每一行的条目数据如【图10】,其中IsSecure为Boolean,表示此文本框是隐藏用户输入文字的密码框。(当然,Item2的创建也可以通过点击Item1,按Command+C,再按Command+V,复制出相同的新条目Item2,然后展开Item2修改其中的值,再增加IsSecure项。)

【图10】

4、添加应用的图标,运行看系统设置中的变化。

点击文件夹中的Assets.xcassets。在点击里面的AppIcon项,如下【图11】,可以看到从左到右三类图标的设置。

第一个用来在iphone的主屏幕上显示你的应用;第二个会在iphone上使用Spolight搜索到应用时出现;第三个则显示在“设置”应用中;

如果需要自己处理图片,可以点击需要设置的方框,如图11,Siz为60x60,但是它的要求是2x的,因此需要图片大小为120x120的。

(可以用mac自带的图片浏览器处理:双击打开待处理的图片,点击屏幕上方:工具->调整大小,在填进120x120时,记得选择的单位是像素!)

【图11】


此时我们只需要设置系统中应用“设置”的图标即可。按Command+R运行项目~~~

这时候,模拟器打开的是一个空白的项目,不急。我们先点击模拟器然后按Command+Shift+H,返回模拟器的屏幕主页,在界面上面找到与手机里面一样的应用设置:

,这时候,我们拉到最下面,可以看到多出了这一行:


单击后,如下图,可以我们创建的账号和密码文本框输入:

【图12】


这就是以上通过bundle包进行设置的方法展示。

下面我们继续添加几项。

Item3:多值字段

折叠Item2之后点击,按下return键添加Item3,在Key这一列弹出的菜单中选择MultiValue,单击左边三角形展开Item3,用之前编辑列表的方法,编辑增加以下6行条目,使其如下图内容一致。

【图13】


其中,Ttiles数组,用于保存可供用户选择的一组值;

Values数组,用于保存用户默认设置中存储的一组值;

Ttiles与Values中的每一项都是对应的,因此,如果用户选择第一项,设置应用实际保存的是Values数组的第一个值,但用户看到的是Titles的第一项。因此这种Ttiles/Values对方便为用户提供易于理解选择。创建Item3时,最下面的“Default Value”行为Xcode自动添加的,代表默认值,将其值设为第一个的Ensign即可。

这就是多值字段的创建。

Item4:开关设置

用闭合Item3,按下return键,创建Item4,在弹出的菜单选择:“Toggle Switch”,设置为以下内容

【图14】

接下来添加滑动条:

按照以上方法,分别创建Item5和Item6:如【图15】

Item5表示设置另外一个分组,且标题为“Warp Factor”。

Item6中,下面值分别代表,

Minimum Value:最小值;                               Maximum Value:最大值;

Min Value Image Filename:滑块最左端图标;    Max Value Image Filename:滑块最右端图标;

(注意:滑块2个图标文件 tag_remove_24 和 tag_add_24 不能只放在主文件夹中,而是需要放在Settings捆绑包中,才能够通过 Min/Max Value Image Filename 设置使用。)

【图15  Item5、Item6的设置】

此时可以运行看看效果。

【图16 添加Item4、5、6之后】

有时候,我们需要在主设置视图中添加子视图。例如说,当我们希望滑块与账号密码的设置不在同一个视图界面,而是通过进入另一个子视图设置。

我们可以向捆绑包添加2个新的Item如下:

【图17】

【图17】(Item7表示添加一个新的分组,可以点击复制Item0然后粘贴添加新的分组Item7,Item8表子视图,其中Filename对应的More表示子视图由“More.plist”加载。)

接下来,我们需要新增一个名为“More.plist”属性文件,可以先添加放在主文件里。

【图18 添加plist文件】

然后点击“Root.plist”中的Preference Items项,然后复制到More.plist属性列表上面,删除除了Item5和Itme6外其他项,如图:

【图19 编辑More.plist属性列表】

需要注意的是,Xcode中不允许直接向设置捆绑包添加新文件,因此需要通过右键"Setting.bundle"选择“show in Finder”打开窗口,然后把More.plist文件拖拽进去。

现在我们以后完成设置捆绑包的基本相关操作了。效果如【图20】,我们可以编译,运行测试项目应用的系统设置。也可以自己动手试试更改属性列表中的其他项。

下一节我们将探讨如何读取应用中的设置

【图20 效果图】


【效果图】


(转载请标明原文出处,谢谢支持 ~ ^-^ ~)

 by:啊左~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容