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

22人阅读 评论(0) 收藏 举报
分类:

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

在按了HOME键的情况下,在第一页的图标中找到设置,会看到程序的设置都在这里。那如何添加自己的程序的设置项呢?

 

1、添加设置项

默认情况下,新建的项目程序是没有设置项的。新建一个项目,命名为 SettingsBundleDemo,选择Single View App模版创建。项目创建完成,在项目里选择创建新文件,

选择Resource 中的Settings Bundle,创建。

 

 

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

 

2、设置的控件

默认的生成的设置项里有这个几个控件。

分别是:Group分组,文本框,Slider,开关控件几个控件。

设置想能使用的控件如下:

 

设置控件类型
文本框PSTextFieldSpecifier
文字PSTitleValueSpecifier
开关控件PSToggleSwitchSpecifier
SliderPSSliderSpecifier
MultivaluePSMultiValueSpecifier
GroupPSGroupSpecifier
子面板PSChildPaneSpecifier.

 

 

3、编辑设置项的文件

展开Settings.bundle,其中包含一个Root.plist。Settings程序中的显示项就是从Root.plist中获取的。单击Root.plist以打开它,在空白处单击,选中Show Raw Keys/Values:

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

对应的plist源文件是这样的:如果你觉得自己手工输入这些项很慢,可以把下面的源文件拷贝到Root.plist里,用源代码打开方式就可以编辑了。

 

[html] view plain copy
  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的按下事件实现如下:

 

  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.   
  11. - (IBAction)setSettings:(id)sender {  
  12.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
  13.     [defaults setValue:username.text forKey:@"username"];  
  14.     NSInteger aihaoIndex = [aihaoTitles indexOfObject:selectedAihao];  
  15.   
  16.     [defaults setValue:[aihaoValues  objectAtIndex:aihaoIndex] forKey:@"aihao"];  
  17.     [defaults setInteger:level.value forKey:@"levelState"];  
  18.     UIAlertView *alert = [[UIAlertView alloc]   
  19.                           initWithTitle:@"偏好设置"  
  20.                           message:@"偏好设置已经保存!"  
  21.                           delegate:nil   
  22.                           cancelButtonTitle: @"完成"   
  23.                           otherButtonTitles:nil];  
  24.     [alert show];   
  25. }  


头文件实现:

 

 

  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>  
  4. {  
  5.     NSMutableArray *aihaoTitles;  
  6.     NSMutableArray *aihaoValues;  
  7.     NSString *selectedAihao;  
  8. }  
  9.   
  10. @property (strong, nonatomic) IBOutlet UITextField *username;  
  11. @property (strong, nonatomic) IBOutlet UIPickerView *pickerView;  
  12. @property (strong, nonatomic) IBOutlet UISlider *level;  
  13. - (IBAction)getSettings:(id)sender;  
  14. - (IBAction)setSettings:(id)sender;  
  15. - (IBAction)doneEdit:(id)sender;  
  16.   
  17.   
  18. @end  


.m文件中其他代码:

 

 

  1. #import "ViewController.h"  
  2.   
  3. @interface ViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8. @synthesize username;  
  9. @synthesize pickerView;  
  10. @synthesize level;  
  11.   
  12. - (void)viewDidLoad  
  13. {  
  14.     [super viewDidLoad];  
  15.     aihaoTitles = [[NSMutableArray alloc] init];  
  16.     [aihaoTitles addObject:@"足球"];  
  17.     [aihaoTitles addObject:@"篮球"];  
  18.     [aihaoTitles addObject:@"乒乓球"];  
  19.     aihaoValues = [[NSMutableArray alloc] init];  
  20.     [aihaoValues addObject:@"football"];  
  21.     [aihaoValues addObject:@"basketball"];  
  22.     [aihaoValues addObject:@"pingpong"];  
  23.     // Do any additional setup after loading the view, typically from a nib.  
  24. }  
  25.   
  26. - (void)viewDidUnload  
  27. {  
  28.     [self setUsername:nil];  
  29.     [self setPickerView:nil];  
  30.     [self setLevel:nil];  
  31.     [super viewDidUnload];  
  32.     // Release any retained subviews of the main view.  
  33. }  
  34.   
  35. - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation  
  36. {  
  37.     return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);  
  38. }  
  39.   
  40. -(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView  
  41. {  
  42.     return 1;  
  43. }  
  44.   
  45. -(NSInteger) pickerView:(UIPickerView *)pickerView   
  46. numberOfRowsInComponent:(NSInteger)component  
  47. {  
  48.     return [aihaoTitles count];  
  49. }  
  50.   
  51. -(NSString *) pickerView:(UIPickerView *)pickerView   
  52.              titleForRow:(NSInteger)row   
  53.             forComponent:(NSInteger)component  
  54. {  
  55.     return [aihaoTitles objectAtIndex:row];  
  56. }  
  57.   
  58. -(void) pickerView:(UIPickerView *)pickerView   
  59.       didSelectRow:(NSInteger)row   
  60.        inComponent:(NSInteger)component  
  61. {  
  62.     selectedAihao = [aihaoTitles objectAtIndex:row];  
  63. }  
  64. - (IBAction)doneEdit:(id)sender{  
  65.       
  66. }  


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

 

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

 

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

 

参考资料:http://blog.csdn.net/totogo2010/

查看评论

中国如何引进CMM评估,促进软件产业发展

中国如何引进CMM评估,促进软件产业发展北京软件行业协会(本文转载自软件工程专家网www.21cmm.com) 一、CMM的含义及作用   CMM(软件能力成熟度模型:Capability Matur...
  • gigix
  • gigix
  • 2002-03-08 09:19:00
  • 1571

设置束(Setting Bundle)的使用

iOS应用程序存储信息的方式很多,但主要有如下3种: 1. 单例类NSUserDefaults:数据通过键/值对的方式存储在NSUserDefaults单例中。 2. 设置束(settings b...
  • nogodoss
  • nogodoss
  • 2014-03-24 11:25:44
  • 5803

iOS开发之iOS程序偏好设置(Settings Bundle)的使用

在Android手机上, 在某个程序里,通过按Menu键,一般都会打开这个程序的设置,而在iOS里,系统提供了一个很好的保存程序设置的机制。就是使用Settings Bundle。 在按了HOM...
  • u012951123
  • u012951123
  • 2014-03-26 17:52:23
  • 790

关于settings.bundle的详细讲解

在传统的桌面应用程序中,偏好设置是一些专门面向应用程序的设置,用于配置应用程序的行为和外观。iPhone OS也支持应用程序偏好设置,但并不将它作为应用程序整体的一部分。在iPhone OS上,应用程...
  • xwren362922604
  • xwren362922604
  • 2012-10-12 11:27:08
  • 2161

iOS教程(三):程序偏好设置(Settings Bundle)

要使用iOS偏好设置其实是个很简单的事情,你只要zuo'dao'l
  • github_20112055
  • github_20112055
  • 2014-09-03 08:42:52
  • 428

ios-(Settings Bundle)程序偏好设置

1、添加设置项:
  • c201038795050
  • c201038795050
  • 2014-08-28 16:35:58
  • 473

delphi 10.1 berlin 开发iOS程序偏好设置(Settings Bundle)

delphi 10.1 berlin 开发iOS程序偏好设置(Settings Bundle)
  • jeff_wdj
  • jeff_wdj
  • 2017-02-11 12:43:05
  • 468

iOS数据持久化 偏好设置

1.偏好设置简介 用NSUserDefaults存储的数据下次程序运行的时候依然存在,那么它把数据存储在什么地方了呢?其实它存储在应用程序内置(沙盒)的一个plist文件里,这个可以根据路径看到...
  • magical_code
  • magical_code
  • 2016-04-09 13:59:03
  • 1118

iOS中使用Settings.Bundle做一些设置

在iOS开发中我们会让用户自己在设置中做一些配置,比如说有些App中某些设置,再例如需要修改APP的服务器地址(让然这种设置可能在开发的过程中我们自己会用到)。 那么在Settings.Bundle...
  • mingmingsuper
  • mingmingsuper
  • 2018-01-11 16:49:15
  • 136

iOSBundle的使用

关于Bundle.我们应该在很多地方看过.比如MJ框架的下拉刷新的那个图片.都是以Bundle的形式和框架一起打包在工程里的. 如何创建一个Bundle1.首先,我们创建一个Bundle工程 1....
  • qq_18683985
  • qq_18683985
  • 2018-01-11 10:40:57
  • 176
    个人资料
    持之以恒
    等级:
    访问量: 11万+
    积分: 5029
    排名: 7028
    最新评论