有很多应用都在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的内容就介绍到这。
相关推荐
4、 细节视图菜单中包含分享和setting选项,用户可以通过分享选项通过其他应用(邮 件、短信等)将天气详细信息分享给别人。如图表 2所示。 5、 利用SQLite对天气预报数据进行持久化保存,如果网络不可用的情况下,...
3、 主视图中包含Map Location和setting选项,通过”Map location” 选项,可以调用手机中安装的地图应用显示当前天气预报所对应的位置,如图表 4所示,用户可以通过setting选项可以修改天气预报的位置,温度的单位...
目录下,因为Android系统的Setting应用及一些符合Android设计思想的应用的设置界面一般都会用它来实现,因此类似于该场景的都可以使用 Preference,比如系统设置、短信都可以使用,简单而又好使用,而且Google原生...
面以W5500为TFTP客户端,讲述如何测试实现TFTP通信过程。 1. 在网上下载Tftp32软件,不需安装直接点击Tftpd32软件就可以应用。 2.配置TFTP服务器信息。如图3所示,Setting——>TFTP。接着在Base Directory选项设置...
该参考应用程序提出了一个简化的面向服务的体系结构实现,通过综合应用程序引入诸如.NET Core与Docker容器之类的技术。然而,这个引用应用程序并不是要解决大型和关键任务的分布式系统中的所有问题,只是让开发人员...
Android应用消耗流量获取,参考Settings源码实现。应用需要经过系统签名以后才能正常使用。
运用双缓冲更以很容易实现画图的撤销动作,可以很容易实现橡皮功能,及橡皮擦的功能。 例如撤销动作,你需要记录每次的画的线的图像,当点击撤销时,你只要将前一幅图像显示出来,同时删除当前的图象即可。而擦除...
Android 6.0系统及以上,弃用Setting.Secure.ALLOW_MOCK_LOCATION变量,没有【允许模拟位置】选项, 增加【选择模拟位置信息应用】,此时需要选择当前应用,才可以addTestProvider, 但未找到获取当前选择应用的方法...
3 2.2.2 功能需求分析 3 2.3 系统总体设计 4 2.3.1 系统结构设计图 4 3 系统实现 4 3.1 系统详细功能说明 4 3.2 系统数据库设计 5 4 系统应用程序设计 10 4.1 系统整体模块组成及实现 10 4.1.1 登录模块的实现 10 ...
本文主要是针对有关防火墙的技术和防火墙应用的模型、设计和实现进行研究,通过对各种防火墙技术和防火墙体系结构的分类比较,对明确防火墙相关概念和选择使用防火墙上具有指导意义。同时,介绍了一种在Linux系统...
% --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in ...
主要介绍用SINAUT产品MD720-3实现GPRS通讯,并与S7-300产品一起组成SCADA系统,实现数据的远程无线访问;
本文实例讲述了Python Django框架实现应用添加logging日志。分享给大家供大家参考,具体如下: Django uses Python’s builtin logging module to perform system logging. Django使用python的内建日志模块来记录...
System:系统设置模块,对应PermSystem中的SystemSetting,用于实现系统设置的业务和数据访问功能 六、PublicFunction:公共函数 ①. CreateSql.cs:快速创建insert、update类型的Sql语句 ②. DataModel.cs:快速执行...
6) 本文件支持高级用户直接通过修改程序设置文件(setting.ini)和界面设置文件(userdoc.rtf)配置程序。但是,此种方式配置后软件将直接读取配置项而不检查数据有效性,可能导致问题,请慎用。 【4.0.0804更新】...
本文主要是针对有关防火墙的技术和防火墙应用的模型、设计和实现进行研究,通过对各种防火墙技术和防火墙体系结构的分类比较,对明确防火墙相关概念和选择使用防火墙上具有指导意义。同时,介绍了一种在Linux系统...
Please re-setting CPU frequency in CMOS setup. 警告:现在系统处在安全模式,从新进入CMOS 进行设置。 CMOS checksun error-del anlts loaded 或是CMOS检查出错。 出现上面两种错是CMOS电池没电了.解决方法:...
依赖注入(DI):当编写一个复杂的Java应用程序时,应用程序类应该尽可能的独立于其他的Java类来增加这些类可重用可能性,当进行单元测试时,可以使...依赖注入实现的3种方式:构造函数注入,setting方法注入、注解注入
页面模块page:包含7个通用菜单页面,包括主页面main_page,图片浏览页面browse_page,连播时间间隔设置页面interval_page,连续播放模式页面auto_page,图片操作菜单manal_page,设置页面setting_page。 2.渲染...
custom_setting_n : "custom_setting_value_n", } } [编辑本段]SWFUpload中的File Object 在SWFUpload的使用过程中,无论在客户端还是服务器端都要和File Object打交道,在一个File Object中包含了以下...