關於設置與配置
1]設置 :應用之外的一個應用
2]配置:應用內開辟的一塊功能
對於一個應用,如果設置的時候需要先退出的話,一般情況屬於設置,不需要退出的話則為配置(例如:游戲的音響開啟屬於配置 )
對於設置與配置有個大概的了解之後,接下來就說一下如何給一個應用添加“設置”的相關內容
1、創建
(1)先創一個YCF_Test的工程
(2)File -> New -> New -> iOS -> Resource -> Settings Bundle -> next -> create :操作完得到Settings.bundle,如下:
Root.Strings內容:
"Group" = "Group"; "Name" = "Name"; "none given" = "none given"; "Enabled" = "Enabled";
Root.plist內容:
2、顯示詳細內容
選擇圖一的Settings.bundle -> Show in Finder ->選中Finder中的Settings.bundle -> 顯示包內容
3、添加文件或圖片
(1)顯示詳細內容
(2)將文件或圖片拖進即可
運行看效果:
點擊YCF_Test可以看到:
下面進行“設置”的添加,也就是對圖二中的Preference Items內容修改成我們所需要的:
將會涉及6種類型:
Group 、 Multi Value 、 Slider 、 Text Field 、Title 、 Toggle Switch
1、PSGroupSpecifier – 相當於tableView的header
(1)應該放在該組最前面
(2)如果添加的標題前面沒有任何分組的信息,則默認為一個分組
(3)可以通過兩種方式:
方式一:
vcq9tv6jujwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
2、PSTextFieldSpecifier
方法一:
為什麼要設置Identifier呢?
下面獲取設置信息時,我們將通過Identifier來區分
方法二:
Type PSTextFieldSpecifier Title 用戶名 Key name_preference KeyboardType Alphabet IsSecure DefaultValue AutocorrectionType None AutocapitalizationType None Type PSTextFieldSpecifier Title 密碼 Key password_preference AutocapitalizationType None AutocorrectionType No KeyboardType Alphabet IsSecure DefaultValue
3、其他的具體操作就不詳說
PSToggleSwitchSpecifier
PSSliderSpecifier
PSMultiValueSpecifier
PSChildPaneSpecifier
PSTitleValueSpecifier
Type PSGroupSpecifier Title Type PSToggleSwitchSpecifier Title 每月流量控制 Key enable_preference DefaultValue Type PSGroupSpecifier Title 每月流量控制(GB) Type PSSliderSpecifier Key slider_preference DefaultValue 0.5 MinimumValueImage [email protected] MaximumValueImage Menu_Icon_Message_Point@2x MinimumValue 0 MaximumValue 1 Type PSGroupSpecifier Title Type PSMultiValueSpecifier Values 你的服務器 我的服務器 Title 服務器 Key multiValue_preference DefaultValue 可選服務器 Titles 本地服務器 遠程服務器 Type PSChildPaneSpecifier Title 通知 File Notification
從上面看到PSMultiValueSpecifier的Values和Titles內容很像
Values 你的服務器 我的服務器 Titles 本地服務器 遠程服務器
Values的內容是獲取設置內容是看到的信息
Titles的內容是提供的選項中可見的
PSMultiValueSpecifier 與 PSChildPaneSpecifier :
PSMultiValueSpecifier :多選一
“通知”的點擊後跳轉到另一個界面,該界面的設置用Notification.plist
(1)創建Notification.plist
(2)添加內容
復制Root.plist中的:
StringsTable Root PreferenceSpecifiers
然後補全為:
StringsTable Root PreferenceSpecifiers Title Type PSGroupSpercifier DefaultValue Key sound_enabled_preference Title 聲音 Type PSToggleSwitchSpecifier DefaultValue Key vibrate_enabled_preference Title 振動 Type PSToggleSwitchSpecifier
看一下運行效果:
// 根據要求搭建UI
// Created by 陽丞楓 on 16/10/27. // Copyright ? 2016年 chengfengYang. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *password; @property (weak, nonatomic) IBOutlet UILabel *username; @property (weak, nonatomic) IBOutlet UILabel *clearCache; @property (weak, nonatomic) IBOutlet UILabel *flowermeter; @property (weak, nonatomic) IBOutlet UILabel *serverName; @property (weak, nonatomic) IBOutlet UILabel *notiSound; @property (weak, nonatomic) IBOutlet UILabel *notiVibrate; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [self getData:nil]; } - (IBAction)getData:(id)sender { NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults]; self.username.text = [userDefault stringForKey:@"name_preference"]; self.password.text = [userDefault stringForKey:@"password_preference"]; if([userDefault boolForKey:@"enable_preference"]) { self.clearCache.text = @"YES"; } else { self.clearCache.text = @"NO"; } self.flowermeter.text = [NSString stringWithFormat:@"%.2fGB", [userDefault doubleForKey:@"slider_preference"]]; self.serverName.text = [userDefault stringForKey:@"multiValue_preference"]; if([userDefault boolForKey:@"sound_enabled_preference"]) { self.notiSound.text = @"YES"; } else { self.notiSound.text = @"NO"; } if([userDefault boolForKey:@"vibrate_enabled_preference"]) { self.notiVibrate.text = @"YES"; } else { self.notiVibrate.text = @"NO"; } } @end
(1)刪除模擬器的應用再運行
(2)進行有關設置
(3)點擊按鈕“查看修改後的按鈕”
大致流程如上
未進行設置前,所有BOOLEAN類型的值都輸出位NO,但是很明顯所有PSToggleSwitchSpecifier的DefaultValue都設置為YES
有沒有可能返回nil而被初始化為NO呢?
(lldb) po [userDefault boolForKey:@"enable_preference"] NO (lldb)
明顯返回值就是NO
也就是說默認設置只能被“設置”所識別,而獲取默認設置信息時是無效的