iOS--如何把你自己的应用程序的设置集合到系统的设置页面中
2014-11-29 10:15
537 查看
// 这部分的知识点不难,但是比较麻烦,需要耐心操作
// 首先给大家看下效果图,就是让自己的应用程序在设置页面中占一个cell,进入后可以设置应用,如图所示:
// 设置页面中的图, 最下面的两个Cell都是我们自己的应用程序
// 点击NSUserDefaults进入后的样式
// 这是关于页面,这个关于设置有点麻烦,需耐心操作
// 看完效果后,我们开始实现
// 首先是新建立的一个项目,我们需要添加一个Settings Bundle设置束文件
// 位于IOS--Resource--Settings Bundle,如下图
// 添加好还不可以,我们还需要设置一个about.plist页面,我们需要在Settings.bundle上右击,执行show in finder
// 然后在Settings.bundle 上再右击,执行显示包内容,
// 然后我们把Root.plist赋值一份,然后改名为about.plist,
// 回到XCode看Settings.bundle的效果如下:
// 打开Root.plist, 设置为如下图的的样式
// 然后设置about.plist,如下图样式
// 在系统的设置中,我们可以显示几种控件,是规定好的,我们不可以自行更改,分别为:Group,Multi Value, Slider, Text Field, Titile, Toggle Switch,总共有这几种样式,不可以自己添加
// 首先来说Group,这个样式就是我们进入NSUserDefaults的使用Cell显示的页面中,总共有两个分组,第一个分组是关于,这个分组没有标题,第二个分组是一些设置,然后这个分组的标题是用户名和密码。这个分组的标题就是使用Group来设置的,
// 第二个是Multi Value,这里没有用到,这个很简单,就是一个多选的样式,也是一个cell,点进去之后我们可以有多种选择,例如:在设置个人爱好的时候可以使用,但要注意,只能选择一个,不可选择多个
// 第三个是Slider,这个不用介绍,就是一个滑杆,可以设置亮度,音量等等,最上面效果图的最后一项
// 第四个是Text Field,这个大家也都很熟悉了,就是文本输入框,可以输入用户名和密码等等,最上面效果图的用户名和密码都是使用的Text Field
// 第五个是Toggle Switch,就是一个开关,可以设置为yes或者no,最上面效果图的Enable那一项使用的就是Toggle Switch
// 在设置中,这些选项足够使用了,还有一个就是关于页面,这个是比较麻烦的一个东西,需要先在finder中显示,然后显示包内容,然后在拷贝一个,然后改名,然后到XCode中修改它的内容,虽然麻烦,但是步骤一步都不能落下。
// 我们在设置中设置好显示的样式之后,还不可以,因为我们需要在应用中使用设置中的一些内容
// 首先我们在设置的类中声明一个方法
#pragma mark - 声明--获取用户偏好设置的
- (void)_getUserPreference;
// 然后我们实现这个方法,如下
#pragma mark - 实现---获取用户偏好设置
- (void)_getUserPreference {
// 实例化出一个NSUserDefaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 通过userDefaults获取偏好设置的值
_nameTextField.text = [userDefaults objectForKey:@"_name"];
_pwdTextField.text = [userDefaults objectForKey:@"_pwd"];
_isSaveDataSwitch.on = [userDefaults objectForKey:@"_isSaveData"]
? YES: NO;
_lightValueSlider.value = (int)[[userDefaultsobjectForKey:@"_lightValue"] stringValue];
_aboutTextView.text = [userDefaults objectForKey:@"_aboutText"];
NSLog(@"slider的值:%d",
(int)[[userDefaults objectForKey:@"_lightValue"]stringValue]);
}
// 然后我们要重写viewWillAppera:方法中对这个方法进行调用,在视图要出现的时候就调用这个方法获取设置中的数据
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 调用方法,获取偏好设置的内容
[self _getUserPreference];
}
// 别着急,上面的操作还不够,如果只是设置了上面的内容,当我们让应用程序进入后台,然后我们在系统设置中进行了设置,然后在进入应用兴奋,我们发现应用设置中的值并没用发生改变,所有我们需要同步一下NSUserDefaults中的内容。同步的地方一定要看好,我们是在应用程序重新被激活的方法中进行同步,在AppDelegate中找下如下方法,并添加代码。
#pragma mark - 当应用程序进入后台重新被激活时会调用此方法
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// 同步一下设置
[[NSUserDefaults standardUserDefaults] synchronize];
}
// 最后一步,我们需要在viewWillAppera:中调用获取设置中的方法时,监听一下重新进入应用程序发送的通知,也就是更新NSUserDefaults中的值
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 监听通知
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(_getUserPreference)name:UIApplicationDidBecomeActiveNotification object:nil];
// 调用方法,获取偏好设置的内容
[self _getUserPreference];
}
// 这样,我们就完成了,系统设置中的内容会显示在应用程序的设置页面,但是我们并没用实现在应用程序的设置页面设置完之后在系统设置页面里的设置也跟着改变,这个其实就更简单了,我们添加一个保存设置的方法,实现如下:
#pragma mark - 实现---backButtonAction:返回并保存数据按钮的事件
- (void)backButtonAction:(UIBarButtonItem *) sender {
[self dismissViewControllerAnimated:YES completion:nil];
// 关闭页面的时候更新设置内容
// 实例化出一个NSUserDefaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:_nameTextField.text forKey:@"_name"];
[userDefaults setObject:_pwdTextField.text forKey:@"_pwd"];
[userDefaults setBool:_isSaveDataSwitch.on forKey:@"_isSaveData"];
[userDefaults setInteger:_lightValueSlider.value forKey:@"_lightValue"];
[userDefaults setObject:_aboutTextView forKey:@"_about"];
}
// 其实原理很简单,plist文件的类型是字典类型的,我们可以通过key来获取这些内容,同样,我们也可以根据key来设置这些内容。
// 完成上面,我们就实现了自己的应用程序在系统的设置中显示并进行同步数据的操作
// 首先给大家看下效果图,就是让自己的应用程序在设置页面中占一个cell,进入后可以设置应用,如图所示:
// 设置页面中的图, 最下面的两个Cell都是我们自己的应用程序
// 点击NSUserDefaults进入后的样式
// 这是关于页面,这个关于设置有点麻烦,需耐心操作
// 看完效果后,我们开始实现
// 首先是新建立的一个项目,我们需要添加一个Settings Bundle设置束文件
// 位于IOS--Resource--Settings Bundle,如下图
// 添加好还不可以,我们还需要设置一个about.plist页面,我们需要在Settings.bundle上右击,执行show in finder
// 然后在Settings.bundle 上再右击,执行显示包内容,
// 然后我们把Root.plist赋值一份,然后改名为about.plist,
// 回到XCode看Settings.bundle的效果如下:
// 打开Root.plist, 设置为如下图的的样式
// 然后设置about.plist,如下图样式
// 在系统的设置中,我们可以显示几种控件,是规定好的,我们不可以自行更改,分别为:Group,Multi Value, Slider, Text Field, Titile, Toggle Switch,总共有这几种样式,不可以自己添加
// 首先来说Group,这个样式就是我们进入NSUserDefaults的使用Cell显示的页面中,总共有两个分组,第一个分组是关于,这个分组没有标题,第二个分组是一些设置,然后这个分组的标题是用户名和密码。这个分组的标题就是使用Group来设置的,
// 第二个是Multi Value,这里没有用到,这个很简单,就是一个多选的样式,也是一个cell,点进去之后我们可以有多种选择,例如:在设置个人爱好的时候可以使用,但要注意,只能选择一个,不可选择多个
// 第三个是Slider,这个不用介绍,就是一个滑杆,可以设置亮度,音量等等,最上面效果图的最后一项
// 第四个是Text Field,这个大家也都很熟悉了,就是文本输入框,可以输入用户名和密码等等,最上面效果图的用户名和密码都是使用的Text Field
// 第五个是Toggle Switch,就是一个开关,可以设置为yes或者no,最上面效果图的Enable那一项使用的就是Toggle Switch
// 在设置中,这些选项足够使用了,还有一个就是关于页面,这个是比较麻烦的一个东西,需要先在finder中显示,然后显示包内容,然后在拷贝一个,然后改名,然后到XCode中修改它的内容,虽然麻烦,但是步骤一步都不能落下。
// 我们在设置中设置好显示的样式之后,还不可以,因为我们需要在应用中使用设置中的一些内容
// 首先我们在设置的类中声明一个方法
#pragma mark - 声明--获取用户偏好设置的
- (void)_getUserPreference;
// 然后我们实现这个方法,如下
#pragma mark - 实现---获取用户偏好设置
- (void)_getUserPreference {
// 实例化出一个NSUserDefaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// 通过userDefaults获取偏好设置的值
_nameTextField.text = [userDefaults objectForKey:@"_name"];
_pwdTextField.text = [userDefaults objectForKey:@"_pwd"];
_isSaveDataSwitch.on = [userDefaults objectForKey:@"_isSaveData"]
? YES: NO;
_lightValueSlider.value = (int)[[userDefaultsobjectForKey:@"_lightValue"] stringValue];
_aboutTextView.text = [userDefaults objectForKey:@"_aboutText"];
NSLog(@"slider的值:%d",
(int)[[userDefaults objectForKey:@"_lightValue"]stringValue]);
}
// 然后我们要重写viewWillAppera:方法中对这个方法进行调用,在视图要出现的时候就调用这个方法获取设置中的数据
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 调用方法,获取偏好设置的内容
[self _getUserPreference];
}
// 别着急,上面的操作还不够,如果只是设置了上面的内容,当我们让应用程序进入后台,然后我们在系统设置中进行了设置,然后在进入应用兴奋,我们发现应用设置中的值并没用发生改变,所有我们需要同步一下NSUserDefaults中的内容。同步的地方一定要看好,我们是在应用程序重新被激活的方法中进行同步,在AppDelegate中找下如下方法,并添加代码。
#pragma mark - 当应用程序进入后台重新被激活时会调用此方法
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// 同步一下设置
[[NSUserDefaults standardUserDefaults] synchronize];
}
// 最后一步,我们需要在viewWillAppera:中调用获取设置中的方法时,监听一下重新进入应用程序发送的通知,也就是更新NSUserDefaults中的值
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 监听通知
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(_getUserPreference)name:UIApplicationDidBecomeActiveNotification object:nil];
// 调用方法,获取偏好设置的内容
[self _getUserPreference];
}
// 这样,我们就完成了,系统设置中的内容会显示在应用程序的设置页面,但是我们并没用实现在应用程序的设置页面设置完之后在系统设置页面里的设置也跟着改变,这个其实就更简单了,我们添加一个保存设置的方法,实现如下:
#pragma mark - 实现---backButtonAction:返回并保存数据按钮的事件
- (void)backButtonAction:(UIBarButtonItem *) sender {
[self dismissViewControllerAnimated:YES completion:nil];
// 关闭页面的时候更新设置内容
// 实例化出一个NSUserDefaults
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:_nameTextField.text forKey:@"_name"];
[userDefaults setObject:_pwdTextField.text forKey:@"_pwd"];
[userDefaults setBool:_isSaveDataSwitch.on forKey:@"_isSaveData"];
[userDefaults setInteger:_lightValueSlider.value forKey:@"_lightValue"];
[userDefaults setObject:_aboutTextView forKey:@"_about"];
}
// 其实原理很简单,plist文件的类型是字典类型的,我们可以通过key来获取这些内容,同样,我们也可以根据key来设置这些内容。
// 完成上面,我们就实现了自己的应用程序在系统的设置中显示并进行同步数据的操作
相关文章推荐
- ios如何让自己的应用程序支持系统自带的分享
- 安卓app中嵌入一个H5页面,当手机系统设置字体变大时,如何使H5页面的字体不会随用户自己调整的系统字体变化而变化?
- Android: 如何向系统设置中添加自己的配置选项及配置页面
- 如何贴加自己的应用程序到WINCE内核中,并且随系统启动而启动!
- 如何贴加自己的应用程序到WINCE内核中,并且随系统启动而启动!
- 如何贴加自己的应用程序到WINCE内核中,并且随系统启动而启动!
- android应用程序跳转到系统的各个设置页面
- iOS如何添加图片资源以及设置应用程序图标
- windows系统如何设置应用程序崩溃自动内存转储
- android应用程序跳转到系统的各个设置页面
- 从android应用程序跳转到系统的各个设置页面
- android应用程序跳转到系统的各个设置页面和通过Intent action 跳转到系统页面,调用系统功能以及action
- android应用程序跳转到系统的各个设置页面
- android应用程序跳转到系统的各个设置页面
- android应用程序跳转到系统的各个设置页面
- android应用程序跳转到系统的各个设置页面
- 如何贴加自己的应用程序到WINCE内核中,并且随系统启动而启动!
- 当系统中存在多个浏览器,如何设置IE为自己的默认浏览器
- iOS如何添加图片资源以及设置应用程序图标
- ios开发之打开系统及自己的应用程序