应用设置Setting的实现
有非常多应用都在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这个选项就是设置是否加密。
其它都非常easy理解。
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的内容就介绍到这。
相关文章
- Option 82在校园网的应用与实现(转)[通俗易懂]
- 实现增长共赢,2022 vivo开发者大会应用与服务专场落幕
- 脑机接口在物联网领域的应用
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
- Linux配置文件:从解析到应用(linux配置文件解析)
- 实战嵌入式Linux项目:综合应用技术实现(嵌入式linux项目实战)
- 的Redis:安全的多线程应用(redis是线程安全)
- MySQL 盲注:实现安全Web应用的根本(mysql盲注)
- 探索Mr技术在Linux系统的应用与优势(linuxmr)
- MySQL中使用IN变量的实用应用(mysqlin变量)
- GUI应用Linux下Qt开发GUI应用:实现梦想的开发之路(linux下qt开发)
- 实用案例展示:如何利用c语言实现Redis应用(credis应用实例)
- 应用SQL Server分发库实现更高效率(sqlserver分发库)
- 互斥量和信号量在Linux中的应用及区别(互斥量信号量linux)
- MSSQL应用脱裤,实现信息可视化(mssql脱裤)
- Oracle数据库应用C语言调用Oracle包(c 调用oracle的包)
- Redis实现登录超时机制的应用(redis设置登录超时)
- Oracle ADUM开发你的数据库应用技能(oracle adum)
- 防护缓存穿透实现Redis缓存穿透优化(redis缓存穿透应用)
- 用JSP/ASP创建WAP应用
- CODEPAGE列表与asp应用例子