在iphone里面,應(yīng)用都會在“設(shè)置”里面有個專屬的應(yīng)用設(shè)置禽拔,選擇該菜單界面,用戶便可以在其中輸入和更改各種選項睹栖,協(xié)助用戶更便捷設(shè)置個人喜好與習慣茧痕。
在這一節(jié)中,希望能通過對捆綁包(bundle)的介紹以及plist文件等的運用曼氛,探討用戶默認機制中,應(yīng)用設(shè)置的開發(fā)與調(diào)用舀患。
【本次開發(fā)環(huán)境: Xcode:7.2 ? ??iOS Simulator:iphone6S plus ? By:啊左】
一气破、設(shè)置捆綁包(bundle)介紹與界面展示
設(shè)置捆綁包(bundle)是應(yīng)用自帶的一組文件,用戶可以通過它進行輸入與更改應(yīng)用的偏好設(shè)置低匙。例如【圖1】,最底下就是開發(fā)的命名為:“應(yīng)用設(shè)置”的app應(yīng)用欺抗。
設(shè)置應(yīng)用充當著ios用戶默認設(shè)置(User Ddefault)機制的通用用戶界面的角色强重。用戶默認設(shè)置是保存和獲取偏好設(shè)置的系統(tǒng)的一部分。在ios應(yīng)用中竿屹,用戶默認設(shè)置由NSUserDefaults類實現(xiàn)(同樣拱燃,在mac中力惯,也是通過這個類來保存和讀取偏好設(shè)置的)。
NSUserDefaults與NSDictinary父晶?
應(yīng)用通過NSUserDefaults用鍵值對的方式來讀取和保存偏好設(shè)置數(shù)據(jù),與通過鍵從NSDictionary對象中獲取數(shù)據(jù)一樣尝苇,不同之處在于NSUserDefaults中的數(shù)據(jù)會被持久保存到文件系統(tǒng)中埠胖,而不是存儲到內(nèi)存中的對象實例中。
本節(jié)將通過開發(fā)一個應(yīng)用非竿,添加并配置一個bundle包。 ?然后從應(yīng)用訪問并且編輯這些偏好設(shè)置红柱,以及從系統(tǒng)偏好設(shè)置中編輯蓖乘,使app控件數(shù)據(jù)發(fā)生變化。
在這個過程铁蹈,進行數(shù)據(jù)同步與更新。
設(shè)置界面【圖2】如下:
【圖2 ?應(yīng)用設(shè)置界面 】(此app名稱就叫“應(yīng)用設(shè)置”容诬。沿腰。 其中,More為最后一個選項的子視圖)
app 應(yīng)用的界面【圖3】如下:
【圖3 app應(yīng)用界面】
所以习蓬,就開始創(chuàng)建項目吧~~
二措嵌、創(chuàng)建boundle包
1、首先通過下面這個圖標創(chuàng)建一個叫“應(yīng)用設(shè)置”的項目企巢,記得將Devices勾選為iphone或是universal,取消勾選Use CoreData或听。
2笋婿、創(chuàng)建bundle捆綁包:
點擊“應(yīng)用設(shè)置”文件夾,然后從左上角選擇File->New->File,選擇ios部分中的Resource缸濒,選擇設(shè)置Bundle圖標(參見圖4 )點擊Next,名字保留默認的Settings霎桅,點擊Create讨永。
此時可以看到這樣的一個“Setting.bundle”捆綁包
,展開.bundle設(shè)置揭糕,能看到"en.Iproj"這個文件夾锻霎,主要用與本地化應(yīng)用,本文不討論本地化應(yīng)用這個內(nèi)容旋恼,主要介紹Root.plist。
3产徊、設(shè)置屬性列表
點擊Root.plist,查看編輯器窗口舟铜,可以看到Xcode的屬性列表編輯器(參見圖5),
如果你的編輯窗口與圖看起來不一樣塘娶,右鍵空白處痊夭,在彈出的菜單中選擇:"Show Raw Keys/Values"。如下圖:
【注意:本文討論的屬性列表plist文件中的圖片她我,都是以"Show Raw Keys/Values"】
查看plist中各項組織結(jié)構(gòu)。屬性列表本質(zhì)上就是字典。在存儲的各個條目的類型與值员淫,都要通過特定的鍵key來檢索他們,這種使用方法與NSDictionaryBoolean拴事、Data、Date刃宵、Number徘公、String可以保存數(shù)據(jù);另外关面,除了Dictionary也可以做為保存字典的節(jié)點外,還有Array節(jié)點捂齐,也是可以儲存含有其他節(jié)點的有序列表缩抡。其中,其中Dictionary和Array是唯一能夠包含其他節(jié)點的屬性列表節(jié)點類型。
(注:雖然平時用的NSDictionary可以使用大多數(shù)對象做為鍵娩嚼,但屬性列表中的Dictionary節(jié)點中鍵必須為字符串類型的榴都,但是可以選擇任意節(jié)點類型做為該鍵的值。)
下面介紹Root.plist中各項的設(shè)置與編輯
其中可以看到StringsTable這個條目嘴高,用于將應(yīng)用轉(zhuǎn)換為另一種語言,本文不會使用到它春瞬,但是也可以留著,雖然沒有多大用宽气。潜沦。
除了StringsTable,屬性列表還有一個名為“PreferenceSpecifiers”的節(jié)點唆鸡,是一個數(shù)組,這個數(shù)組節(jié)點保存的一組Dictionary節(jié)點燃逻,每個Dictionary節(jié)點都代表著用戶可修改的一個偏好設(shè)置項或用戶可以訪問的一個設(shè)置頁面的子視圖臂痕。
你會注意到這個屬性列表模板中,有4個Item節(jié)點握童,在本應(yīng)用中沒有實際作用,所以分別點擊Item1到
3澡绩,按delet依次刪除它們,只留下Item0淀衣。
(技巧:要在屬性列表中選擇一項召调,最好是單擊Key列的一端或者另一端蛮浑,否則容易打開Key列的下拉菜單只嚣。)
點擊Item0左邊的三角形展開, 可以看到2行數(shù)據(jù)册舞。其中Type鍵的值PSGroupSpecifier說明該條目是一個新分組的開始,緊跟其后的每個條目都會是此分組的一部分盛杰,直到有個新的Type鍵的值為PSGroupSpecifier才開始另一個分組藐石。因此在PSGroupSpecifier中的Item0在屬性列表中必須始終為PSGroupSpecifier類型,這樣確保每個設(shè)置列表中都會至少有一個分組存在于微。
Item0中的Title鍵,用與設(shè)置這個組上的標題驱证。后面我們可以在系統(tǒng)設(shè)置上面看到。
仔細觀察Item0(Group -?Group)中抹锄,第一個Group代表Type項的值吗坚,第二個Group代表Titile項的值呆万。這是Xcode有助于只管觀察捆綁包內(nèi)容的便捷方式。
我們將Item0中的Title將它從Group改為Group Info谋减。
下面我們在設(shè)置中添加一個讓用戶輸入賬號和密碼的2個文本框。
首先點擊Item0左邊展開的三角形庄吼,使它關(guān)閉,然后選擇Item0按下return鍵总寻。
此時添加了一個新的與Item0的同級行梢为,出現(xiàn)一個下拉菜單【圖7】轰坊,顯示默認值TextField祟印。選擇TextField,讓菜單消失颤芬。
展開Item1套鹅,可以看到如【圖8】,把它的標題Title鍵的值改為zhanghao(用于顯示在設(shè)置中),Key鍵的值改為ZH(做為我們獲取和編輯這個文本框的鍵芋哭,工作方式與Dictionary相似)
在Item的最后一行,也就是Key這行豌习,按下return鍵添加一個新行拔疚,將其鍵設(shè)置為AutocapitalizationType,并且點擊這一行最右邊的選擇項
稚失,選擇Words(表示文本框用戶輸入本文本框時,自動將每個單詞改成首字母大寫)句各,也可以自己輸入。
同理矾屯,添加AutocorrectionType選擇No(表示不會自動更正輸入到該文本框中的值
)初厚,也可以自己輸入。
(記住標題是用來顯示在設(shè)置屏幕上面的产禾;鍵是用來存儲值的;)
接下來添加密碼這一文本框欄妄痪,可以通過添加Item1的方法楞件,添加Item2條目僧著,每一行的條目數(shù)據(jù)如【圖10】障簿,其中IsSecure為Boolean,表示此文本框是隱藏用戶輸入文字的密碼框站故。(當然,Item2的創(chuàng)建也可以通過點擊Item1愈腾,按Command+C,再按Command+V虱黄,復制出相同的新條目Item2吮成,然后展開Item2修改其中的值,再增加IsSecure項粱甫。)
4、添加應(yīng)用的圖標危纫,運行看系統(tǒng)設(shè)置中的變化乌庶。
點擊文件夾中的Assets.xcassets。在點擊里面的AppIcon項瞒大,如下【圖11】,可以看到從左到右三類圖標的設(shè)置会傲。
第一個用來在iphone的主屏幕上顯示你的應(yīng)用锅棕;第二個會在iphone上使用Spolight搜索到應(yīng)用時出現(xiàn)慷垮;第三個則顯示在“設(shè)置”應(yīng)用中浊猾;
如果需要自己處理圖片忱叭,可以點擊需要設(shè)置的方框会油,如圖11,Siz為60x60案狠,但是它的要求是2x的,因此需要圖片大小為120x120的伸辟。
(可以用mac自帶的圖片瀏覽器處理:雙擊打開待處理的圖片,點擊屏幕上方:工具->調(diào)整大小,在填進120x120時垂谢,記得選擇的單位是像素6妗)
此時我們只需要設(shè)置系統(tǒng)中應(yīng)用“設(shè)置”的圖標即可饮亏。按Command+R運行項目~~~
這時候,模擬器打開的是一個空白的項目予借,不急狞换。我們先點擊模擬器然后按Command+Shift+H修噪,返回模擬器的屏幕主頁,在界面上面找到與手機里面一樣的應(yīng)用設(shè)置:
,這時候库倘,我們拉到最下面,可以看到多出了這一行:
單擊后饱亿,如下圖,可以我們創(chuàng)建的賬號和密碼文本框輸入:
這就是以上通過bundle包進行設(shè)置的方法展示钻注。
下面我們繼續(xù)添加幾項配猫。
Item3:多值字段。
折疊Item2之后點擊泵肄,按下return鍵添加Item3,在Key這一列彈出的菜單中選擇MultiValue腐巢,單擊左邊三角形展開Item3,用之前編輯列表的方法诵盼,編輯增加以下6行條目,使其如下圖內(nèi)容一致风宁。
其中蛹疯,Ttiles數(shù)組,用于保存可供用戶選擇的一組值饮寞;
Values數(shù)組,用于保存用戶默認設(shè)置中存儲的一組值幽崩;
Ttiles與Values中的每一項都是對應(yīng)的寞钥,因此,如果用戶選擇第一項理郑,設(shè)置應(yīng)用實際保存的是Values數(shù)組的第一個值,但用戶看到的是Titles的第一項柒爵。因此這種Ttiles/Values對方便為用戶提供易于理解選擇。創(chuàng)建Item3時棉胀,最下面的“Default Value”行為Xcode自動添加的,代表默認值唁奢,將其值設(shè)為第一個的Ensign即可。
這就是多值字段的創(chuàng)建驮瞧。
Item4:開關(guān)設(shè)置
用閉合Item3枯芬,按下return鍵,創(chuàng)建Item4千所,在彈出的菜單選擇:“Toggle Switch”,設(shè)置為以下內(nèi)容
接下來添加滑動條:
按照以上方法淫痰,分別創(chuàng)建Item5和Item6:如【圖15】
Item5表示設(shè)置另外一個分組,且標題為“Warp Factor”籽孙。
Item6中,下面值分別代表,
Minimum Value:最小值犯建; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Maximum Value:最大值瓜客;
Min Value Image Filename:滑塊最左端圖標; ? ?Max Value Image Filename:滑塊最右端圖標谱仪;
(注意:滑塊2個圖標文件?tag_remove_24 和?tag_add_24?不能只放在主文件夾中,而是需要放在Settings捆綁包中嗦随,才能夠通過?Min/Max Value Image Filename 設(shè)置使用。)
此時可以運行看看效果筷转。
有時候,我們需要在主設(shè)置視圖中添加子視圖唤殴。例如說,當我們希望滑塊與賬號密碼的設(shè)置不在同一個視圖界面朵逝,而是通過進入另一個子視圖設(shè)置。
我們可以向捆綁包添加2個新的Item如下:
【圖17】(Item7表示添加一個新的分組啤咽,可以點擊復制Item0然后粘貼添加新的分組Item7渠脉,Item8表子視圖,其中Filename對應(yīng)的More表示子視圖由“More.plist”加載芋膘。)
接下來,我們需要新增一個名為“More.plist”屬性文件为朋,可以先添加放在主文件里。
然后點擊“Root.plist”中的Preference Items項胶惰,然后復制到More.plist屬性列表上面融涣,刪除除了Item5和Itme6外其他項,如圖:
需要注意的是威鹿,Xcode中不允許直接向設(shè)置捆綁包添加新文件,因此需要通過右鍵"Setting.bundle"選擇“show in Finder”打開窗口幼东,然后把More.plist文件拖拽進去。
現(xiàn)在我們以后完成設(shè)置捆綁包的基本相關(guān)操作了根蟹。效果如【圖20】糟秘,我們可以編譯,運行測試項目應(yīng)用的系統(tǒng)設(shè)置尿赚。也可以自己動手試試更改屬性列表中的其他項蕉堰。
下一節(jié)我們將探討如何讀取應(yīng)用中的設(shè)置悲龟。
(轉(zhuǎn)載請標明原文出處,謝謝支持 ~ ^-^ ~)
? by:啊左~