iOS開(kāi)發(fā)之Settings Bundle的使用

在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)建。

419AD41B-D78E-416F-8455-6FA35F29E5DB

運(yùn)行。按home鍵,打開(kāi)設(shè)置,看到設(shè)置里多了一項(xiàng),“中國(guó)好編程”。這就為程序添加了一個(gè)設(shè)置。

設(shè)置頁(yè)面
settings bundle 默認(rèn)

這樣我們就添加了成功了。
可是,令人疑惑的事情發(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

在空白處單擊,選中Show Raw Keys/Values:

選中Show Raw Keys/Values

現(xiàn)在你可以通過(guò)修改或者刪除原有的自己重新建自己的設(shè)置項(xiàng)
這里我們將原來(lái)的都刪除吧。新建成這樣:

設(shè)置項(xiàng)

對(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); 
獲取結(jié)果展示

保存內(nèi)容:

[defaults setObject:@"ao ba ma" forKey:@"username"];
[defaults synchronize];
保存結(jié)果展示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容