有很多应用都在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的内容就介绍到这。
相关推荐
在Android系统中,Setting应用是用户与系统设置交互的主要界面,涵盖了各种设备配置选项,如Wi-Fi、蓝牙、显示、声音、账户等。本资源提供了Android 4.0(Ice Cream Sandwich,ICS)版本的Setting模块应用层的源代码...
实现Setting Bundle到应用的连接: 1. 将Setting Bundle添加到项目的资源目录中。 2. 在项目设置的Info.plist中,添加`CFBundleURLTypes`和`LSApplicationQueriesSchemes`,使得应用能够链接到设置。 3. 在应用中,...
2. **简化开发**:无需编写复杂的代码即可实现设置功能,降低开发难度。 3. **易于更新**:如果需要更改设置项,只需更新`Setting.bundle`,无需重新发布整个应用。 要查看或编辑`Setting.bundle`,你可以右键点击...
"IOS开发应用设置Demo"是一个实例项目,它展示了如何在iOS应用中实现各种类型的设置。这个Demo涵盖了五种不同的设置类别,帮助开发者理解并实践iOS应用配置的实现方式。 首先,我们来详细了解一下iOS中的应用设置是...
"PrintSetting_打印设置_printSetting_nailsh4v_"这个标题暗示了我们正在讨论一个与打印配置相关的程序或功能,可能是某个软件应用的一部分,用于定制打印任务的各项参数。"nailsh4v"可能是一个开发者的标识或者特定...
它允许你在不重启服务器或重新部署应用的情况下,轻松地修改Laravel应用的配置设置。 Laravel本身提供了.env文件来存储环境变量,但这并不适合在运行时频繁更改的配置。`laravel-setting`包引入了一种新的机制,让...
在Laravel框架中进行开发,"Setting Backend"通常指的是创建一个用于管理应用配置的后端系统。这可能包括用户界面,允许管理员添加、编辑或删除应用程序的配置项。在这个项目"Laravel开发-setting-backend ibrand"中...
`Setting`菜单的添加可以为用户提供方便的访问系统设置的入口,提高用户体验。本教程将详细讲解如何在`ActionBar`中增加一个自定义的`Setting`菜单,并使用`PopupWindow`来实现这一功能。 首先,我们需要了解`...
在Laravel框架中,"Setting"通常指的是应用的配置管理,它是系统运行的关键部分,用于定义各种环境变量、服务提供者、中间件等。Laravel 5开始引入了一些改进,使得设置管理更加灵活和强大。下面我们将深入探讨...
1. **res/xml/setting.xml**: 这个XML文件定义了设置应用中的所有选项和分类。例如,`sound_and_display_settings.xml`包含了声音和显示相关的设置项,如`Orientation`。 2. **源代码(src)**: 源码按照Java的包...
在`SettingItem-master`压缩包中,可能包含了这个自定义控件的完整实现,包括源码、测试用例以及示例应用,这可以帮助开发者更好地理解和使用`SettingItem`。通过学习和实践,我们可以快速掌握自定义控件的制作技巧...
标题中的“Gprs dial up setting”指的是GPRS(General Packet Radio Service)拨号设置,这是一种在2G移动通信网络中实现数据传输的技术。GPRS允许移动设备通过蜂窝网络进行互联网连接,它属于分组交换技术,相对...
总之,"安卓Setting[弹性ScrollView]Demo"是一个关于如何在Android应用中实现具有弹性滚动效果的设置界面的实例。开发者可以通过学习和研究这个Demo,了解如何自定义ScrollView的行为,以及如何构建和美化设置界面。...
在Android 4.2.2中,这个库可能被用于实现设置应用中的安全功能,如数据加密、数字签名以及安全通信。 2. **framework**: Framework库是Android系统的基石,它包含了系统的核心服务和API,如Activity Manager、...
当我们通过设置应用改变系统设置时,实际就是与SystemSetting交互。 二、SystemSettings类 在Android源码中,`com.android.server.SystemSettingsService`是SystemSetting的主要实现类,它继承自`android.app....
在iOS系统中,Setting.App是一个至关重要的组件,它负责管理用户的设备设置,包括网络、隐私、应用权限等各个方面。这个2.7z压缩包文件很可能是开发者或技术人员用于研究、调试或更新iOS系统设置的应用程序资源。...
标题和描述均指向了一个深入分析Android原生设置(Setting)应用内部结构和技术细节的文档——“android原生setting分析(修改版).doc”。此文档详细地解析了Android系统的设置模块是如何构建、数据如何存储和读取,...
SettingsService负责处理系统的设置服务,而packages/apps/Settings则包含了设置应用的各种界面和逻辑。这两个部分相互配合,共同构成了Android系统设置的核心。 二、SettingsService详解 SettingsService是系统...
根据提供的文件信息,标题、描述和标签均为"setting-eur.txt",这表明该文件可能与某种设置或配置有关,并且特别关注“EUR”(欧元)这一元素。然而,给出的部分内容似乎是一串无法识别的字符,这可能是由于编码错误...
在“setting”这个项目中,开发人员可能使用了以上的一种或多种方法来实现数据传递。例如,用户选择某个设置项后,可能会触发一个事件,由`Activity`捕获并处理,然后通过接口回调或`ViewModel`将数据传递给相应的`...