IOS – 添加Settings Bundle應用程序首選項到Settings應用程序

iPhone容許應用程序將自定義首選項添加到Settings應用程序中,開發者也能夠以編程的方式指定這些設置,但添加到Settings應用程序的方式會提供一個友好的GUI。自定義首選項支持多種多樣的數據交互風格,包括文本、密碼、開關、滑塊、以及二級選擇頁面。但這裏應注意避免敏感信息。數據庫

IOS應用程序存儲信息的方式主要有三種:

1. 單例類NSUserDefaults:NSUserDefaults類的工做原理相似於NSDictionary,全部首選項都以鍵/值對的方式存儲在NSUserDefaults單例中。編程

2. 設置束(Settings Bundle):提供了一個經過iOS應用程序Settings對應用程序進行配置的接口。api

3. 直接訪問文件系統:可以讀取屬於當前應用程序的iOS文件系統部分的文件。常見的如數據庫文件。數組

設置束也是對一個plist文件進行編輯,它的優勢在於,能夠經過Xcode plist編輯器來操做,無需額外編寫代碼,只須要在編輯器裏定義要存儲的數據及其鍵便可。安全

建立設置首選項菜單的步驟以下:

1.New File…,選擇Resource,選擇Settings Bundle,建立一個Settings.bundle文件,默認名稱便可。建議添加到Supporting Files分組裏。編輯器

 

2.打開項目窗口的Settings.bundle項,應該看到Root.plist和en.lproj文件,其中en.lproj是關於設置束國際化的文件,暫時不考慮。打開Root.plist文件,這個文件本質上就是字典,是以鍵值對來存儲和操做的。ide

 

3.Root.plist文件中的節點的類型有:Boolean、Data、Date、Number、String(基本的類型);Dictionary和Array(可以包含其餘節點的類型)。字體

4.在Root.plist中設置屬性列表的時候要遵循特定格式。咱們可以操做的地方在Preference Items數組(類型爲Array)裏,請刪除或修改此項裏面的默認項,若是有的話。正常狀況下應愛是有四個子項的分別爲分組、輸入框、開關、滑塊(個人Xcode版本爲6.3.2)。但請注意,Preference Items項的(直接)子項只可以是Dictionary類型的。spa

 

設置束中的文件Root.plist決定了應用程序首選項如何呈如今應用程序Settings中。有7種類型的首選項,分別爲:設計

 

Text Field:文本框。鍵爲PSTextFieldSpecifier,可編輯的文本字符串。經常使用於保存用戶自定義的信息,如暱稱等。

Title:標題。鍵爲PSTitleValueSpecifier,只讀文本字符串。經常使用於顯示不變的信息,如版本信息。

Toggle Switch:開關。鍵爲PSToggleSwitchSpecifier,開關按鈕。

Slider:滑塊。鍵爲PSSliderSpecifier,取值位於特定範圍內的滑塊。

Multi value:多值。鍵爲PSMultiValueSpecifier,下拉式列表。

Group:編組。鍵爲PSGroupSpecifier,首選項邏輯編組的標題。經常使用於設置項的分組。

Child Pane:子窗格。鍵爲PSChildPaneSpecifier,子首選項頁。經常使用於選項比較多的選擇菜單。

 

小竅門:

當前Xcode版本中,能夠快速建立各菜單項。單擊菜單項的鍵列,會彈出快捷建立項的菜單。選擇想要的類型便可自動建立部分鍵值對,而後略作修改便可。

 

下面開始介紹各類菜單的用法:

1.Text Field:文本框。文本框可選的鍵有以下幾個:

 

Autocapitalization Style:自動大寫。有四個值: None(無)、Sentences(句子首字母大寫)、Words(單詞首字母大寫)、All Characters(全部字母大寫)。

Autocorrection Style:自動糾正拼寫,若是開啓,你輸入一個不存在的單詞,系統會劃紅線提示。有三個值:Default(默認)、No Autocorrection(不自動糾正)、Autocorrection(自動糾正)。

Default Value:默認值。注意,包括其餘菜單的Default Value,只是默認的值,一旦用戶直接或間接更改,Default Value再也不做用,此後顯示或獲取的都只是用戶最新設置的值。

Identifier:設置項標示,用於在程序中獲取設置項的值的鍵Key。

Keyboard Type:鍵盤樣式。有五個值:Alphabet(字母表,默認)、Numbers and Punctuation(數字和標點符號)、Number Pad(數字面板)、URL(比Alphabet多出了.com等域名後綴)、Email Address(比Alphabet多出了「@」符號)。

Text Field Is Secure:是否爲安全文本(密碼)。若是設置爲YES,則內容以圓點符號出現。

Title:提示文本。用於在你的文本框前提示文本框的內容。

Type:設置文本框的話,這個只能選Text Field。

設置完成後,你的文本框項多是這樣的:

 

 

2.Title:標題。標題可選的鍵有以下幾個:

 

Default Value:默認值。這個會顯示在設置項的右方,灰色字體。

Identifier、Title同上。

Titles和Values:用於指定Default Value的可選值,如分別在Titles和Values下各設置5個值,這時能夠指定Default Value爲Values裏的一個值,這時會在設置裏顯示Titles裏相應的項。Titles和Values中,顯示時只顯示對應的Title,取值時只獲取到對應的Value。注意經過代碼修改這個Title對應的Value時,要確認值包含在Values。 注意這裏的Titles和Values項,不會在Settings頁面中生成一個子級設置頁面供選擇Value。

Type:設置標題的話,這個只能選Title。

設置完成後,你的標題項多是這樣的:

 

 

3.Toggle Switch:開關按鈕。開關項可選的鍵有以下幾個:

 

Default Value:默認值。

Identifier、Title同上。

Type:設置開關的話,這個只能選Toggle Switch。

Value for ON和Value for OFF:設置開關狀態對應的值。

設置完成後,你的開關項多是這樣的:

 

 

4.Slider:滑塊。滑塊項可選的鍵有以下幾個:

 

Default Value、Identifier同上。

Minimum Value、Maximum Value:最小值和最大值。

Min Value Image Filename、Max Value Image Filename:在滑動條左右顯示的圖片。圖片大小必須爲21*21,而且要放在Settings.bundle包內(在Finder裏顯示包內容,而後粘貼)。

Type:設置滑塊的話,這個只能選Slider。

設置完成後,你的滑塊項多是這樣的:

 

 

5.Multi value:多值。多值項可選的鍵有以下幾個:

 

Default Value:默認值。

Identifier、Title同上。

Type:設置開關的話,這個只能選Multi Value。

Titles和Values:基本同上,但這個多值的Titles和Values會在Settings頁面中生成一個子級設置頁面供選擇Value。

 

6.Group:分組。

若是你要在首選項裏面添加分組的話,那麼請使用Group:創建一個Preference Items的子項(如:「Item 0」),類型爲「Dictionary」,而且包含兩個類型爲「String」子項,名稱分別爲:「Type」和「Title」,值分別爲:「Group」和「GroupName」(GroupName是你自定義的組名,能夠任意的名字)。注意,分組直到遇到下一個同級的指示分組的項結束,或者遇到同級最後一項時結束。

設置完成後,你的fe項多是這樣的:

 

 

7.Child Pane:子窗格。這個能夠定義一個二級菜單,可選的鍵有三個:

 

Type:建立子窗格必選Child Pane。

Title:標題,在應用程序首選項菜單中父頁顯示的標題。

Filename:指定子窗格菜單對應的plist文件,相似於默認的Root.plist。這個項填寫時不要帶後綴名。另外這個文件要和Root.plist文件放到一塊兒。右鍵Root.plist文件,選擇Show in Finder。而後在Finder窗口中右鍵Root.plist文件選擇複製。默認會複製到當前目錄下一個Root.plist的副本。接着修改一個有意義的名字便可(這裏改爲Child.plist)。而後編輯Child.plist文件,右鍵Child.plist的根項目,選擇Property List Type裏的iPhone Settings plist。這樣再編輯這個文件時,就會有自動提示了。

 

 

Child.plist文件的StringsTable這一項無關緊要,建議保留,並修改鍵爲Strings Filename(和Root.plist中相同),值爲其文件名,這裏是Child,不要帶文件後綴。

 

 

設計設置菜單項就這麼多吧。這些Setting的數據將存儲在NSUserDefaults中StandardDefaults當中,每一個設置對應的identifier就是Key。而後只須要按NSUserDefaults的操做方式操做設置項就好了。

下面貼出一段獲取設置項的代碼:

 1 - (void)readingSettingsPreference
 2 {
 3     //獲取Settings.bundle路徑
 4     NSString *settingsBundle = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
 5 
 6     if(!settingsBundle)
 7     {
 8         NSLog(@"找不到Settings.bundle文件");
 9         return;
10     }
11 
12     //讀取Settings.bundle裏面的配置信息
13     NSDictionary *settings = [NSDictionary dictionaryWithContentsOfFile:[settingsBundle stringByAppendingPathComponent:@"Root.plist"]];
14     NSArray *preferences = [settings objectForKey:@"PreferenceSpecifiers"];
15     NSMutableDictionary *defaultsToRegister = [[NSMutableDictionary alloc] initWithCapacity:[preferences count]];
16 
17     for(NSDictionary *prefSpecification in preferences)
18     {
19         NSString *key = [prefSpecification objectForKey:@"Key"];
20         if(key)
21         {
22             [defaultsToRegister setObject:[prefSpecification objectForKey:@"DefaultValue"] forKey:key];
23         }
24     }
25 
26     [[NSUserDefaults standardUserDefaults] registerDefaults:defaultsToRegister];
27 
28     [[NSUserDefaults standardUserDefaults] synchronize];
29 
30     //TODO:讀取指定數據
31 
32 }
相關文章
相關標籤/搜索