目录[-]

在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

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

  3. <plist version="1.0">

  4. <dict>

  5. <key>PreferenceSpecifiers</key>

  6. <array>

  7. <dict>

  8. <key>Type</key>

  9. <string>PSGroupSpecifier</string>

  10. <key>Title</key>

  11. <string>个人信息</string>

  12. <key>Key</key>

  13. <string></string>

  14. </dict>

  15. <dict>

  16. <key>Type</key>

  17. <string>PSTextFieldSpecifier</string>

  18. <key>Title</key>

  19. <string>姓名</string>

  20. <key>Key</key>

  21. <string>username</string>

  22. </dict>

  23. <dict>

  24. <key>Type</key>

  25. <string>PSMultiValueSpecifier</string>

  26. <key>Values</key>

  27. <array>

  28. <string>football</string>

  29. <string>basketball</string>

  30. <string>pingpong</string>

  31. </array>

  32. <key>Title</key>

  33. <string>爱好</string>

  34. <key>Titles</key>

  35. <array>

  36. <string>足球</string>

  37. <string>篮球</string>

  38. <string>乒乓球</string>

  39. </array>

  40. <key>Key</key>

  41. <string>aihao</string>

  42. <key>DefaultValue</key>

  43. <string>football</string>

  44. </dict>

  45. <dict>

  46. <key>FalseValue</key>

  47. <string>NO</string>

  48. <key>TrueValue</key>

  49. <true/>

  50. <key>DefaultValue</key>

  51. <false/>

  52. <key>Type</key>

  53. <string>PSToggleSwitchSpecifier</string>

  54. <key>Title</key>

  55. <string>婚姻状况</string>

  56. <key>Key</key>

  57. <string>maritalStatus</string>

  58. </dict>

  59. <dict>

  60. <key>Type</key>

  61. <string>PSGroupSpecifier</string>

  62. <key>Title</key>

  63. <string>等级</string>

  64. <key>Key</key>

  65. <string></string>

  66. </dict>

  67. <dict>

  68. <key>DefaultValue</key>

  69. <integer>5</integer>

  70. <key>MaximumValue</key>

  71. <integer>10</integer>

  72. <key>MinimumValue</key>

  73. <integer>1</integer>

  74. <key>Type</key>

  75. <string>PSSliderSpecifier</string>

  76. <key>Title</key>

  77. <string>等级</string>

  78. <key>Key</key>

  79. <string>levelState</string>

  80. </dict>

  81. </array>

  82. <key>StringsTable</key>

  83. <string>Root</string>

  84. </dict>

  85. </plist>

这时候运行,在来到设置项看:

已经是我们自己设置的效果了。

4、在程序中获取Settings 和写入Settings 添加UI

这里的项目是设置好了,那怎么读取呢?我们先在程序里添加一些对应的UI.打开.xib文件,往里放置控件,并生成对应的映射和Action。

pickerView的使用请参考iOS学习之UIPickerView控件的简单使用这篇文章。

5、实现读取设置和保存代码

关键是通过: NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];

代码获取设置项的NSUserDefaults值,然后通过key获取设置的内容和保存设置内容

在两个Button的按下事件实现如下:

[cpp] view plaincopy

  1. - (IBAction)getSettings:(id)sender {

  2. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

  3. username.text =  [defaults objectForKey:@"username"];

  4. selectedAihao = [defaults objectForKey:@"aihao"];

  5. NSLog(@"aihao:%@",selectedAihao);

  6. NSInteger aihaoIndex = [aihaoValues indexOfObject:selectedAihao];

  7. [pickerView selectRow:aihaoIndex inComponent:0 animated:YES];

  8. [level setValue:[defaults integerForKey:@"levelState"]];

  9. }

  10. - (IBAction)setSettings:(id)sender {

  11. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

  12. [defaults setValue:username.text forKey:@"username"];

  13. NSInteger aihaoIndex = [aihaoTitles indexOfObject:selectedAihao];

  14. [defaults setValue:[aihaoValues  objectAtIndex:aihaoIndex] forKey:@"aihao"];

  15. [defaults setInteger:level.value forKey:@"levelState"];

  16. UIAlertView *alert = [[UIAlertView alloc]

  17. initWithTitle:@"偏好设置"

  18. message:@"偏好设置已经保存!"

  19. delegate:nil

  20. cancelButtonTitle: @"完成"

  21. otherButtonTitles:nil];

  22. [alert show];

  23. }

头文件实现:

[cpp] view plaincopy

  1. #import <UIKit/UIKit.h>

  2. @interface ViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>

  3. {

  4. NSMutableArray *aihaoTitles;

  5. NSMutableArray *aihaoValues;

  6. NSString *selectedAihao;

  7. }

  8. @property (strong, nonatomic) IBOutlet UITextField *username;

  9. @property (strong, nonatomic) IBOutlet UIPickerView *pickerView;

  10. @property (strong, nonatomic) IBOutlet UISlider *level;

  11. - (IBAction)getSettings:(id)sender;

  12. - (IBAction)setSettings:(id)sender;

  13. - (IBAction)doneEdit:(id)sender;

  14. @end

.m文件中其他代码:

[cpp] view plaincopy

  1. #import "ViewController.h"

  2. @interface ViewController ()

  3. @end

  4. @implementation ViewController

  5. @synthesize username;

  6. @synthesize pickerView;

  7. @synthesize level;

  8. - (void)viewDidLoad

  9. {

  10. [super viewDidLoad];

  11. aihaoTitles = [[NSMutableArray alloc] init];

  12. [aihaoTitles addObject:@"足球"];

  13. [aihaoTitles addObject:@"篮球"];

  14. [aihaoTitles addObject:@"乒乓球"];

  15. aihaoValues = [[NSMutableArray alloc] init];

  16. [aihaoValues addObject:@"football"];

  17. [aihaoValues addObject:@"basketball"];

  18. [aihaoValues addObject:@"pingpong"];

  19. // Do any additional setup after loading the view, typically from a nib.

  20. }

  21. - (void)viewDidUnload

  22. {

  23. [self setUsername:nil];

  24. [self setPickerView:nil];

  25. [self setLevel:nil];

  26. [super viewDidUnload];

  27. // Release any retained subviews of the main view.

  28. }

  29. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

  30. {

  31. return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);

  32. }

  33. -(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView

  34. {

  35. return 1;

  36. }

  37. -(NSInteger) pickerView:(UIPickerView *)pickerView

  38. numberOfRowsInComponent:(NSInteger)component

  39. {

  40. return [aihaoTitles count];

  41. }

  42. -(NSString *) pickerView:(UIPickerView *)pickerView

  43. titleForRow:(NSInteger)row

  44. forComponent:(NSInteger)component

  45. {

  46. return [aihaoTitles objectAtIndex:row];

  47. }

  48. -(void) pickerView:(UIPickerView *)pickerView

  49. didSelectRow:(NSInteger)row

  50. inComponent:(NSInteger)component

  51. {

  52. selectedAihao = [aihaoTitles objectAtIndex:row];

  53. }

  54. - (IBAction)doneEdit:(id)sender{

  55. }

运行,输入姓名zhongguo 和爱好 足球,选择等级,保存设置。打开设置查看,可以读取到保存后的设置。

这样就可以操作和这只程序的设置项了。

例子代码:http://download.csdn.net/detail/totogo2010/4398462

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢

iOS开发之iOS程序偏好设置(Settings Bundle)的使用的更多相关文章

  1. 【读书笔记】iOS-iOS开发之iOS程序偏好设置(Settings Bundle)的使用

    在Android手机上, 在某个程序里,通过按Menu键,一般都会打开这个程序的设置,而在iOS里,系统提供了一个很好的保存程序设置的机制.就是使用Settings Bundle. 在按了HOME键的 ...

  2. 李洪强iOS开发之iOS社区收集

    李洪强iOS开发之iOS社区收集 项目 简述 github 全球最大的代码仓库,无论是iOS开发还是Android开发没有人不知道这个网站,它也是一个社区,你可以去follow(关注)某些人或公司. ...

  3. 李洪强iOS开发之iOS好文章收集

    李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...

  4. 李洪强iOS开发之iOS工具收集

    李洪强iOS开发之iOS工具收集 项目 简述 日期 我是怎么慢慢变懒的 : Jenkins + 蒲公英 使用Jenkins + 蒲公英使得项目打包给测试人员自动化,大大节省了劳动力 2015.04.1 ...

  5. 李洪强iOS开发之iOS学习方法收集

    李洪强iOS开发之iOS学习方法收集 在这里收集一些iOS学习方法,会不断更新 项目 简述 日期 一年多iOS开发总结 作者总结了自己一年多的iOS学习经验,对于iOS初学者来说很多地方是可以借鉴的 ...

  6. 李洪强IOS开发之iOS好项目收集

    李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...

  7. 李洪强iOS开发之iOS技术博客

    李洪强iOS开发之iOS技术博客 注意:访问博客请直接点击博客,不要点击后面的RSS地址 博客地址 RSS地址 南峰子的技术博客   剑尖博客   图拉鼎   Henry Lee   Dev Talk ...

  8. iOS开发之APP推送设置WIFI

    在iOS开发过程中,有时需要连接网络.当访问请求,检测到网络不可用时,需要提示用户手动进行设置网络并告知用户操作路径设置可用的网络. 只需一行代码即可实现: - (void)viewDidLoad { ...

  9. iOS开发之AppIcon及LaunchScreen设置

    一.AppIcon设置 具体设置步骤如下图: 二.LaunchScreen设置与停留时间设置 具体设置步骤如下图: 通过程序可以增加背景的停留时间:

随机推荐

  1. Linux NFS 说明,配置及故障分析

    一.NFS服务简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操 ...

  2. 解决Android拍照保存在系统相册不显示的问题

    可能大家都知道我们保存相册到Android手机的时候,然后去打开系统图库找不到我们想要的那张图片,那是因为我们插入的图片还没有更新的缘故,先讲解下插入系统图库的方法吧,很简单,一句代码就能实现 Med ...

  3. ModelAndView使用方法

    配置支持ModelAndView 在application.xml中配置支持ModelAndView,配置方式有两种. 配置一 <bean id="ViewResolver" ...

  4. Magento 使用心得

    Modules->模块 Controller->控制器 Model->模型 Magento是这个星球上最强大的购物车网店平台.当然,你应该已经对此毫无疑问了.不过,你可能还不知道,M ...

  5. (转)MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet

    1.安装准备 1).下载安装MyEclipse2014,这已经是最新版本. 2).下载Tomcat 官网:http://tomcat.apache.org/ 我们选择8.0: http://tomca ...

  6. 理解C#中的继承

    继承 1.创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类对象的所有字段开辟空间.只不过父类私有的成员访问不到而已. 2.base关键字可以调用父类的非私有成员. 3.子类的访问 ...

  7. javaweb常用工具类及配置文件备份

    Javaweb常用工具类及配置文件备份   做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /*  * hibernate获取sessi ...

  8. 转载---SQL Server XML基础学习之<5>--XQuery(query)

    本章写一些SQL Server XML的一些XQuery基础语法,主要讲的query查询语法 T-SQL 支持用于查询 XML 数据类型的 XQuery 语言的子集. XQuery 基于现有的 XPa ...

  9. ACM/ICPC ZOJ1006-Do the Untwist 解题代码

    #include <iostream> #include <string> #include <stdlib.h> using namespace std; int ...

  10. Tomcat6.0数据库连接池配置

    http://blog.163.com/magicc_love/blog/static/185853662201111101130969/ oracle驱动包Tomcat 6.0配置oracle数据库 ...