iOS开发之iOS程序偏好设置(Settings Bundle)的使用
2019独角兽企业重金招聘Python工程师标准>>>
在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/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
谢谢这篇文章的作者,讲解的很详细,很有用
转载于:https://my.oschina.net/u/1432769/blog/198598
iOS开发之iOS程序偏好设置(Settings Bundle)的使用相关推荐
- (0089)iOS开发之iOS应用间相互跳转(URL Scheme)
需求:假设有应用A和应用B两个应用,现在需要从应用A跳转到应用B中.如果手机中没有安装跳到下载页,如果已经安装直接打开APP. 认识URL Scheme URL Schemes是苹果给出的用来跳转到系 ...
- (0060)iOS开发之iOS 9: UIStackView入门
iOS 9: UIStackView入门 UIStackView 同iOS以往每个迭代一样,iOS 9带来了很多新特性.UIKit框架每个版本都在改变,而在iOS 9比较特别的是UIStackView ...
- (0067)iOS开发之iOS新增类UILayoutGuide的用途
UILayoutGuide 是iOS 9苹果新增的API.(苹果文档地址:https://developer.apple.com/documentation/uikit/uilayoutguide? ...
- iOS开发之ARC(自动引用计数)
iOS开发之ARC(自动引用计数) 英文原文:Automatic Reference Counting on iOS 参与翻译(4人): 纶巾客, showme, 李远超, 王宇龙 自动引用计数(AR ...
- iOS开发之AVKit框架使用
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...
- iOS开发之Accounts框架详解
2019独角兽企业重金招聘Python工程师标准>>> iOS开发之Accounts框架详解 Accounts框架是iOS原生提供的一套账户管理框架,其支持Facebook,新浪微博 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
- 蓝牙开发之 IOS AMS
目录 前言 什么是 AMS 效果展示 AMS 介绍 AMS 字节序和字节码 依赖性 术语 AMS Service UUID AMS Characteristic 实体 播放器(Player)属性表 队 ...
- iOS开发之c语言入门教程
苹果作为移动互联的高端品牌,iOS操作系统也被用户公认为是最好用的移动互联网操作系统.据了解,曾一度拒绝为iOS平台对出浏览器的火狐在今年5月份的时候,他们却食言了.今天,Mozilla宣布iOS版F ...
最新文章
- Dialplan 编程基础
- jQuery数组处理详解(含实例演示)
- linux 时钟同步 chrony 简介
- 用Autofac替换.net core 内置容器
- php 信号量 关闭,php 信号量
- java静态导入_Java中越来越多地接受静态导入吗?
- Effective Objective-C 2.0 — 第二条:类的头文件中尽量少引入其他头文件
- Python之路:初识
- 情人节脱单秘诀,程序员表白的情话大盘点!| CSDN 博文精选
- 敏捷领导力的反面模式
- 专业的格式转换工具pdf2cad发布v11,支持当前所有的Windows和Mac操作系统
- 如何将Ant Design Icon本地化
- matlab心电显示,请问如何在GUI界面中打开并显示心电信号
- 视频教程-C/C++黑客编程入门教学视频-C/C++
- 移动新魔百和M302A-YS代工_卡刷固件包
- 智遥工作流连接SAP,查询超时解决方法
- itunes下载的软件所在目录
- Unity同时接入微信和支付宝支付 Android篇(aar包和jar包)
- Zookeeper知识要点与集群安装,欢迎纠错
- CDGA:应聘数仓岗,选择企业级别 or 算法团队?