iOS开发之iOS程序偏好设置(Settings Bundle)的使用
目录[-]
在Android手机上, 在某个程序里,通过按Menu键,一般都会打开这个程序的设置,而在iOS里,系统提供了一个很好的保存程序设置的机制。就是使用Settings Bundle。
在按了HOME键的情况下,在第一页的图标中找到设置,会看到程序的设置都在这里。那如何添加自己的程序的设置项呢?
1、添加设置项
默认情况下,新建的项目程序是没有设置项的。新建一个项目,命名为 SettingsBundleDemo,选择Single View App模版创建。项目创建完成,在项目里选择创建新文件,
选择Resource 中的Settings Bundle,创建。

再给程序添加一个icon。运行。按home键,打开设置,看到设置里多了一项,SettingsBundleDemo。这就为程序添加了一个设置。

2、设置的控件
默认的生成的设置项里有这个几个控件。
分别是:Group分组,文本框,Slider,开关控件几个控件。

设置想能使用的控件如下:
| 设置控件 | 类型 |
|---|---|
| 文本框 | PSTextFieldSpecifier |
| 文字 | PSTitleValueSpecifier |
| 开关控件 | PSToggleSwitchSpecifier |
| Slider | PSSliderSpecifier |
| Multivalue | PSMultiValueSpecifier |
| Group | PSGroupSpecifier |
| 子面板 | PSChildPaneSpecifier. |
3、编辑设置项的文件
展开Settings.bundle,其中包含一个Root.plist。Settings程序中的显示项就是从Root.plist中获取的。单击Root.plist以打开它,在空白处单击,选中Show Raw Keys/Values:

我们把原有的项删掉,添加自己的设置项,添加如下:

对应的plist源文件是这样的:如果你觉得自己手工输入这些项很慢,可以把下面的源文件拷贝到Root.plist里,用源代码打开方式就可以编辑了。
[html] view plaincopy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>个人信息</string>
<key>Key</key>
<string></string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>姓名</string>
<key>Key</key>
<string>username</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Values</key>
<array>
<string>football</string>
<string>basketball</string>
<string>pingpong</string>
</array>
<key>Title</key>
<string>爱好</string>
<key>Titles</key>
<array>
<string>足球</string>
<string>篮球</string>
<string>乒乓球</string>
</array>
<key>Key</key>
<string>aihao</string>
<key>DefaultValue</key>
<string>football</string>
</dict>
<dict>
<key>FalseValue</key>
<string>NO</string>
<key>TrueValue</key>
<true/>
<key>DefaultValue</key>
<false/>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>婚姻状况</string>
<key>Key</key>
<string>maritalStatus</string>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>等级</string>
<key>Key</key>
<string></string>
</dict>
<dict>
<key>DefaultValue</key>
<integer>5</integer>
<key>MaximumValue</key>
<integer>10</integer>
<key>MinimumValue</key>
<integer>1</integer>
<key>Type</key>
<string>PSSliderSpecifier</string>
<key>Title</key>
<string>等级</string>
<key>Key</key>
<string>levelState</string>
</dict>
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>
这时候运行,在来到设置项看:

已经是我们自己设置的效果了。
4、在程序中获取Settings 和写入Settings 添加UI
这里的项目是设置好了,那怎么读取呢?我们先在程序里添加一些对应的UI.打开.xib文件,往里放置控件,并生成对应的映射和Action。

pickerView的使用请参考iOS学习之UIPickerView控件的简单使用这篇文章。
5、实现读取设置和保存代码
关键是通过: NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];
代码获取设置项的NSUserDefaults值,然后通过key获取设置的内容和保存设置内容
在两个Button的按下事件实现如下:
[cpp] view plaincopy
- (IBAction)getSettings:(id)sender {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
username.text = [defaults objectForKey:@"username"];
selectedAihao = [defaults objectForKey:@"aihao"];
NSLog(@"aihao:%@",selectedAihao);
NSInteger aihaoIndex = [aihaoValues indexOfObject:selectedAihao];
[pickerView selectRow:aihaoIndex inComponent:0 animated:YES];
[level setValue:[defaults integerForKey:@"levelState"]];
}
- (IBAction)setSettings:(id)sender {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:username.text forKey:@"username"];
NSInteger aihaoIndex = [aihaoTitles indexOfObject:selectedAihao];
[defaults setValue:[aihaoValues objectAtIndex:aihaoIndex] forKey:@"aihao"];
[defaults setInteger:level.value forKey:@"levelState"];
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"偏好设置"
message:@"偏好设置已经保存!"
delegate:nil
cancelButtonTitle: @"完成"
otherButtonTitles:nil];
[alert show];
}
头文件实现:
[cpp] view plaincopy
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>
{
NSMutableArray *aihaoTitles;
NSMutableArray *aihaoValues;
NSString *selectedAihao;
}
@property (strong, nonatomic) IBOutlet UITextField *username;
@property (strong, nonatomic) IBOutlet UIPickerView *pickerView;
@property (strong, nonatomic) IBOutlet UISlider *level;
- (IBAction)getSettings:(id)sender;
- (IBAction)setSettings:(id)sender;
- (IBAction)doneEdit:(id)sender;
@end
.m文件中其他代码:
[cpp] view plaincopy
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize username;
@synthesize pickerView;
@synthesize level;
- (void)viewDidLoad
{
[super viewDidLoad];
aihaoTitles = [[NSMutableArray alloc] init];
[aihaoTitles addObject:@"足球"];
[aihaoTitles addObject:@"篮球"];
[aihaoTitles addObject:@"乒乓球"];
aihaoValues = [[NSMutableArray alloc] init];
[aihaoValues addObject:@"football"];
[aihaoValues addObject:@"basketball"];
[aihaoValues addObject:@"pingpong"];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[self setUsername:nil];
[self setPickerView:nil];
[self setLevel:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
-(NSInteger) pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
return [aihaoTitles count];
}
-(NSString *) pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
return [aihaoTitles objectAtIndex:row];
}
-(void) pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
{
selectedAihao = [aihaoTitles objectAtIndex:row];
}
- (IBAction)doneEdit:(id)sender{
}
运行,输入姓名zhongguo 和爱好 足球,选择等级,保存设置。打开设置查看,可以读取到保存后的设置。


这样就可以操作和这只程序的设置项了。
例子代码:http://download.csdn.net/detail/totogo2010/4398462
著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
iOS开发之iOS程序偏好设置(Settings Bundle)的使用的更多相关文章
- 【读书笔记】iOS-iOS开发之iOS程序偏好设置(Settings Bundle)的使用
在Android手机上, 在某个程序里,通过按Menu键,一般都会打开这个程序的设置,而在iOS里,系统提供了一个很好的保存程序设置的机制.就是使用Settings Bundle. 在按了HOME键的 ...
- 李洪强iOS开发之iOS社区收集
李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...
- 李洪强iOS开发之iOS好文章收集
李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...
- 李洪强iOS开发之iOS工具收集
李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...
- 李洪强iOS开发之iOS学习方法收集
李洪强iOS开发之iOS学习方法收集 在这里收集一些iOS学习方法,会不断更新 项目 简述 日期 一年多iOS开发总结 作者总结了自己一年多的iOS学习经验,对于iOS初学者来说很多地方是可以借鉴的 ...
- 李洪强IOS开发之iOS好项目收集
李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...
- 李洪强iOS开发之iOS技术博客
李洪强iOS开发之iOS技术博客 注意:访问博客请直接点击博客,不要点击后面的RSS地址 博客地址 RSS地址 南峰子的技术博客 剑尖博客 图拉鼎 Henry Lee Dev Talk ...
- iOS开发之APP推送设置WIFI
在iOS开发过程中,有时需要连接网络.当访问请求,检测到网络不可用时,需要提示用户手动进行设置网络并告知用户操作路径设置可用的网络. 只需一行代码即可实现: - (void)viewDidLoad { ...
- iOS开发之AppIcon及LaunchScreen设置
一.AppIcon设置 具体设置步骤如下图: 二.LaunchScreen设置与停留时间设置 具体设置步骤如下图: 通过程序可以增加背景的停留时间:
随机推荐
- Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中scrollTo 与 scrollBy这两个函数的区别 . 首先 ,我们必须明白在Android ...
- web工程中spring+ibatis的单元测试--转载
为了保证代码的正确,软件的质量,单元测试几乎是每个程序员都要面临的工作了;而开发中大部分的工作都涉及数据库的操作,也就是平时经常可以看到的DAO了;由于是对数据库的操作,就必然有事务的问题了;如果是启 ...
- “DBUtility.DbHelperSQL”的类型初始值设定项引发异常 “DBUtility.DbHelperSQL”的类型初始值设定项引发异常
今天遇到了一个这样的问题“DBUtility.DbHelperSQL”的类型初始值设定项引发异常“DBUtility.DbHelperSQL”的类型初始值设定项引发异常 也许有和我遇到这问题的人也在这 ...
- shell脚本结构示例1
2013年以来自己因为偷懒,少写了很多东西,今年计划把以前积累的总结出来. 先从shell开始写起吧. 干了快3年游戏运维,期间经常会写一些shell本,不少脚本其实有很多可以复用的部分. 按照自己的 ...
- DES加密系统的实现
这是一个高内聚低耦合可复用的DES加密系统的实现. Github 链接:https://github.com/cyendra/CyDES 要实现加密系统,先考虑数据的基本单位. 在DES加密中,数据是 ...
- 介绍SmartUpload很好的网站
附带链接:http://www.cnblogs.com/elleniou/archive/2012/09/24/2700583.html
- Sql面试常考题(持续添加)
最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近 ...
- sql 几个常用函数
ROUND 用法: --15.000 表示小数点第一位取四舍五入,将原小数点后的位数都设置为0SELECT ROUND(15.258,0) --15.300,第二个参数如果是1,则取原值小数点后第一位 ...
- dbms_job涉及到的知识点
用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...
- JS获取日期和时间
//获取日期和时间 function showDate(){ var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFul ...