在Android手機(jī)上, 在某個(gè)程序里,通過(guò)按Menu鍵,一般都會(huì)打開(kāi)這個(gè)程序的設(shè)置,而在iOS里,系統(tǒng)提供了一個(gè)很好的保存程序設(shè)置的機(jī)制。就是使用Settings Bundle。
在按了HOME鍵的情況下,在第一頁(yè)的圖標(biāo)中找到設(shè)置,會(huì)看到程序的設(shè)置都在這里。那如何添加自己的程序的設(shè)置項(xiàng)呢?
1.添加設(shè)置項(xiàng)
默認(rèn)情況下,新建的項(xiàng)目程序是沒(méi)有設(shè)置項(xiàng)的。
在項(xiàng)目里選擇創(chuàng)建新文件,選擇Resource 中的Settings Bundle,創(chuàng)建。
運(yùn)行。按home鍵,打開(kāi)設(shè)置,看到設(shè)置里多了一項(xiàng),“中國(guó)好編程”。這就為程序添加了一個(gè)設(shè)置。
這樣我們就添加了成功了。
可是,令人疑惑的事情發(fā)生了,當(dāng)我再次運(yùn)行程序時(shí),程序設(shè)置頁(yè)面不再有我settings bundle的設(shè)置選項(xiàng)了,這是什么鬼,是程序出現(xiàn)了什么問(wèn)題嗎?
解決辦法:雙擊home鍵彈出多任務(wù)列表,從多任務(wù)列表中移除調(diào)試的app和系統(tǒng)設(shè)置app,再進(jìn)入系統(tǒng)設(shè)置app就可以了
2.設(shè)置的控件
默認(rèn)的生成的設(shè)置項(xiàng)里有這個(gè)幾個(gè)控件。
設(shè)置控件 | 類型 |
---|---|
文本框 | PSTextFieldSpecifier |
文字 | PSTitleValueSpecifier |
開(kāi)關(guān)控件 | PSToggleSwitchSpecifier |
Slider | PSSliderSpecifier |
Multivalve | PSMultiValueSpecifier |
Group | PSGroupSpecifier |
子面板 | PSChildPaneSpecifier. |
3.編輯設(shè)置項(xiàng)的文件
展開(kāi)Settings.bundle,其中包含一個(gè)Root.plist。Settings程序中的顯示項(xiàng)就是從Root.plist中獲取的。單擊Root.plist以打開(kāi)它
在空白處單擊,選中Show Raw Keys/Values:
現(xiàn)在你可以通過(guò)修改或者刪除原有的自己重新建自己的設(shè)置項(xiàng)
這里我們將原來(lái)的都刪除吧。新建成這樣:
對(duì)應(yīng)的plist源文件是這樣的:如果你覺(jué)得自己手工輸入這些項(xiàng)很慢,可以把下面的源文件拷貝到Root.plist里,用源代碼打開(kāi)方式就可以編輯了。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>個(gè)人信息</string>
<key>Key</key>
<string></string>
</dict>
<dict>
<key>Type</key>
<string>PSTextFieldSpecifier</string>
<key>Title</key>
<string>姓名</string>
<key>Key</key>
<string>username</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Values</key>
<array>
<string>swimming</string>
<string>climb</string>
<string>bike</string>
</array>
<key>Title</key>
<string>愛(ài)好</string>
<key>Titles</key>
<array>
<string>游泳</string>
<string>爬山</string>
<string>騎行</string>
</array>
<key>Key</key>
<string>aihao</string>
<key>DefaultValue</key>
<string>bike</string>
</dict>
<dict>
<key>FalseValue</key>
<string>NO</string>
<key>TrueValue</key>
<true/>
<key>DefaultValue</key>
<true/>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>是否成年</string>
<key>Key</key>
<string>maritalStatus</string>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>等級(jí)</string>
<key>Key</key>
<string></string>
</dict>
<dict>
<key>DefaultValue</key>
<integer>5</integer>
<key>MaximumValue</key>
<integer>10</integer>
<key>MinimumValue</key>
<integer>1</integer>
<key>Type</key>
<string>PSSliderSpecifier</string>
<key>Title</key>
<string>等級(jí)</string>
<key>Key</key>
<string>levelState</string>
</dict>
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>
這時(shí)候運(yùn)行,在來(lái)到設(shè)置項(xiàng)看:
4.實(shí)現(xiàn)讀取設(shè)置和保存代碼
關(guān)鍵是通過(guò):NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
代碼獲取設(shè)置項(xiàng)的NSUserDefaults值,然后通過(guò)key獲取設(shè)置的內(nèi)容和保存設(shè)置內(nèi)容
獲取內(nèi)容:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *name = [defaults objectForKey:@"username"];
NSLog(@"userName:%@",name);
保存內(nèi)容:
[defaults setObject:@"ao ba ma" forKey:@"username"];
[defaults synchronize];