题记:写这篇博客要主是加深自己对实现数据的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。
有很多应用都在iOS设置中有相关的设置,如下图:
通过这个设置可以便利的对应用的一些基本的设置进行更改。
要完整的实现这个设置功能,有以下几方面问题须要处理:
1)设置的编写(实现设置的功能)
2)设置内容的存储(保证设置经过更改后能当即失效。比如最小化应用,然后在设置中更改,重新打开应用,应当显示新的设置方式)
关于这方面的内容可以参考苹果开辟文档:Preferences and Settings Programming Guide
下面说一下实现过程:
STEP 1:编写设置
通过Settings Bundle来实现。
1) 新建一个Settings Bundle:
创立好后可以看到如下内容:
我们可以看到,settings bundle里面包含了两个文件,一个是Root.plist用于设置要设置的内容,另一个Root.strings用于多语言化。我们当初不斟酌多语言化的内容,只看Root.plist的设置方法。
我们看到Root.plist文件里面已事后有几个item,这些就是要设置的内容。一共有7种类型:
这些很好懂得,除了Child pane都是一些控件,只是这里通过plist文件来实现。Child pane是子页面,可能绝对麻烦一点。先说一下前面几个。
首先看一下要的效果:
1)Group
设置如下:
2)Text Field
设置如下:
这里的identifier就是之后存储须要用到的Key,就是利用NSUserDefaults,之后介绍。
然后Text Field is Secure这个选项就是设置是不是加密。其他都很轻易懂得。
3)Toggle Switch
4)Slider
可以添加阁下图片
5)Multi Value
设置如下:
下面介绍一下Child Pane的应用。
要添加新的设置页面,须要创立新的plist。
上图摘自开辟文档,可以很清楚的看出结构。
因此我们须要创立新的plist文件。
关键点在于我们不能在Xcode中创立,因为在Xcode中我们没法将文件拉进bundle里面,因此,最简略的方法就是,打开bundle的文件管理器,然后复制Root.plist,再改名!!!
接下来是设置Child Pane:
filename就是新的plist的名称,无需加后缀。
然后在Child.plist的编辑和Root.plist一样。关键点在于为了编辑便利,应当将Child.plist的类型设置为iPhone Settings plist
OK,通过下面的方法,我们就能够在界面上完成须要的设置功能。下面是进行数据的操作。
STEP 2:应用NSUserDefaults实现preference的存储。
首先明确的是下面的Setting的数据将存储在NSUserDefaults中StandardDefaults当中,每个设置对应的identifier就是Key。
1)一般我们须要设置一些初始数据,也就是应用第一次打开就能将数据进行初始默认设置。
代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSDictionary *defaults = @{kScreenAutoLock: @NO, kSensitivityValue: @5}; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; return YES; }
通过一个dictionary来进行设置。这里的kScreenAutoLock是macro定义的key,就是identifier
2)在获取数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; value = [defaults floatForKey:kSensitivityValue]; switch = [defaults boolForKey:kScreenAutoLock];
3)更改数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setFloat:5.0f forKey:kSensitivityValue]; [defaults synchronize];
记住要应用synchronize来实现数据的存储。
4)弥补
单单应用下面的方法还不敷,存在的问题就是如果我们在设置中进行设置更改,那么这是如果应用已启动,打开应用后数据因为没有同步,还是设置前的数据。因此,在程序EnterForeground时候,应用应当进行数据的同步。
在应用中,就是通过notification,在EnterForeground时候同步更改的数据
代码:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];
- (void)applicationWillEnterForeground:(NSNotification *)notification { [[NSUserDefaults standardUserDefaults] synchronize]; [self refreshSettings]; // 更新设置显示 }
关于settings的内容就介绍到这。
文章结束给大家分享下程序员的一些笑话语录:
祝大家在以后的日子里. 男生象Oracle般健壮; 女生象win7般漂亮; 桃花运象IE中毒般频繁; 钱包如Gmail容量般壮大, 升职速度赶上微软打补丁 , 追女朋友像木马一样猖獗, 生活像重装电脑后一样幸福, 写程序敲代码和聊天一样有**。
---------------------------------
原创文章 By
应用和内容
---------------------------------