您好,登錄后才能下訂單哦!
在iphone和ipad中,有一個東西大家一定很熟悉,那個東西就是Settings。
這次要學(xué)習(xí)的東西說白了很簡單,就是學(xué)習(xí)如何在Settings中對一個app的某些屬性進行設(shè)置,反過來,在app中更改了一些屬性值,也會反應(yīng)到Settings中,這個功能很常用,實現(xiàn)起來也相對簡單,但是內(nèi)容還是比較多的。
首先還是對Settings進行一個簡單的說明,雖然我們經(jīng)常打開Settings,但是很少對Settings進行過仔細的研究,不過作為一名ios的開發(fā)人員,有這個必要對Settings進行一番探索,看看Settings里面到底包含了哪些東西,這些東西又是什么。
首先我們打開Settings,可以看到Settings的主界面(畫面截取自iphone模擬器)
可以看到,Settings的主界面是一個Table View,Style的屬性是Grouped。除了常見的General、Airplane Mode、Wi-Fi、Notifications等(后面3個未在截圖中出現(xiàn),打開你的iphone,Settings里面會有這些選項),iphone為每個有需要的app創(chuàng)建了一個cell,例如Twitter、Facebook等。點擊Twitter,即可以看到該app所包含的一些設(shè)置項。
Settings中的設(shè)置項是有限制的,一共可以包含以下4類:Text Field,Switch,Slider, TableView的checklist。
大家應(yīng)該看出,Settings其實是一個Navigation Controller,View與View之間是繼承關(guān)系。
在說一下iOS中是以什么方式來操作Settings的,這個東西叫做NSUserDefaults,它可以方便的在app與Settings進行交互,保存更新值。
好了,簡單的介紹就到這里,下面我們開始這次的例子,作完這個例子,相信會對Settings有更深的了解。
1)創(chuàng)建一個工程,左邊選擇Application,右邊選擇Utility Application,點擊Next按鈕
在Product Name中輸入AppSettings,然后選中Use Storyboards,點擊Next按鈕
點擊Create按鈕完成創(chuàng)建
觀察一下程序為我們自動創(chuàng)建的工程項目文件,里面有一個很常見的BIDAppDelegate,另外我們剛才選中的Use Storyboard,因此有一個MainStoryboard.storyboard存在,除了這些,另外還有4個文件,分別是BIDMainViewController和BIDFlipsideViewController,這個是Utility Application模板自動為我們創(chuàng)建的。
由于這是我們第一次使用Utility Application,因此在這里做一些簡單的介紹,Utility Application會自動幫我們創(chuàng)建2個view,第一個view叫做main view,第二個view叫做flipside view,在main view上面有一個information button,點擊這個information button就會切換到flipside view。在flipside view的navigator bar上有一個Done按鈕,點擊這個Done按鈕,就會切換回main view。在Project navigator中選中MainStoryboard.storyboard,就會看見2這個view,而這2個view就分別對應(yīng)著BIDMainViewController和BIDFlipsideViewController。
好了,下面我們需要添加一個Settings Bundle,如果你的一個app需要在Settings中進行設(shè)置,那么在你的項目中一定要加Settings Bundle,這個東西的作用就是當(dāng)你把你的app安裝到iphone上后,它會自動在Settings中添加與這個項目相關(guān)的一個條目(cell)用于設(shè)置。
2)添加Settings Bundle
選擇File>New>File...,在左邊的選擇Resource,右邊選擇Settings Bundle,點擊Next按鈕
保留默認的名字,點擊Create按鈕完成添加
展開Settings.bundle,有2個默認項,一個是en.lproj文件夾(這個暫時忽略,用戶本地化程序的,現(xiàn)在無需理會),另一個是Root.plist,從后綴名我們可以斷定,Settings中的項是基于Property list,也就是一個xml文件。
選中Property list,在editor pane中會顯示如下內(nèi)容
我們改變一下Root.list的顯示方式,在editor pane的任何地方點擊鼠標右鍵,然后在彈出的菜單中選擇“Show Raw Keys/Values”
然后Root.plist會顯示如下樣子
最直觀的發(fā)現(xiàn)是2個Key的名字變了,“Preference Items”變成了“PreferenceSpecifiers”,“Strings Filename”變成了“StringsTable”,其實內(nèi)容并沒有改變,只是顯示的方式不同,這個看個人喜好吧,前者名字比較通俗移動,后者名字更貼近實現(xiàn)情況。
另外,我們不必過多關(guān)注StringsTable,這個值是用在localization的時候的,因此在這里你可以直接刪了它。
3)添加Settings中的控件
添加Text Field
接著我們展開PerferenceSpecifiers,里面有4個默認的Item,這些都是系統(tǒng)幫我們生成的,但是這些并不是我們這個例子想要的,所以,我們刪除Item 1、Item 2、Item 3,只保留Item 0。
(上圖中我把StringsTable也刪了)
接著我們展開Item 0,看看里面有些什么的東西
里面有一個Title和Type鍵值對(也就是Dictionary),我們把注意力集中到Type,它的值是PSGroupSpecifier,說明這個item是一個group類型,在這個item之后的所有同級item,都是屬于這個group的,直到下一個group類型出現(xiàn)。在PreferenceSpecifiers下,必須要有至少一個group存在。Title用于設(shè)置這個group的名稱,這個屬性是可以省略的。
在觀察一下Item 0的顯示方式:Item 0 (Group - Group),括號中第一個Group是只這個item的類型為PSGroupSpecifier,第二個Group是這個item的Title值。我們修改一下Title的值,設(shè)置其為“General Info”
設(shè)置完成后,你會發(fā)現(xiàn)Item 0的顯示變成了:Item 0 (Group - General Info)
PSGroupSpecifier并不是一個實際可以操作的類型,它的作用僅僅是把幾個相關(guān)的屬性包含在一起,形成一個table view中的group,下面我們添加可操作的節(jié)點。
首先將Item 0合攏,然后鼠標選中Item 0的整行,單擊鍵盤上的return鍵,一個新的Item(Item 1)出現(xiàn)在Item 0的下方,并有一個列表彈出,讓你選擇這個Item的類型
在這里我們選擇Text Field,創(chuàng)建完Item 1后,展開Item 1
可以看到一共有3個鍵值對,Type的類型為PSTextFieldSpecifier,另外2個分別是Title和Key,將Title賦值為“Username”,將Key賦值為“username”(注意大小寫)。這里的Key是用于保存和獲取Item 1的值的,每一個Item你可以理解為是一個Dictionary,一個Dictionary就是一個鍵值對,那么這個Key的作用就是獲取或者保存指定的值。(Item 0中并沒有Key,這個是因為Item 0的類型是PSGroupSpecifier,沒有需要保存的值)
在這篇文章剛剛開始的時候,我們提到過NSUserDefaultes,NSUserDefaultes就是使用這個key來獲得item的值的,也是用這個key來保存更新值的。
最后我們?yōu)镮tem 1再添加2個屬性,選中Item 1中最后一行(Key所在的行),然后按下鍵盤上的return,一個新的行出現(xiàn)在Key的下面,另外有一個list讓你選中Key的名字,這里我們選擇“AutocapitalizationType”,然后設(shè)置值為“None”。同樣的方法再添加一次,這次選擇“AutocorrectionType”,然后設(shè)置值為“No”
“AutocapitalizationType”的意思是是否自動完成輸入,也就是說你輸入一個單詞的前幾個字,系統(tǒng)會出現(xiàn)一個列表,列表里面會有相關(guān)的詞匯,你只有直接選中,就可以完成輸入了,這里我們設(shè)置為“None”,無需自動完成。
“AutocorrectionType”的意思是自動糾正拼寫,就是系統(tǒng)幫你建成你輸入的單詞是否有拼寫錯誤,我們同樣把這個功能關(guān)掉了。
好了,保存一下Root.plist。
到此為止,我們可以試著編譯運行程序了,為了使程序能夠在Settings中突出顯示(好找一點),我們?yōu)槌绦蛱砑右粋€圖標,先下載一個圖標icon,然后在Project navigator中選中根節(jié)點AppSettings,然后在左邊選擇TARGETS下的AppSettings,打開Summary tab,展開iPhone / iPod Deployment Info,找到App Icons
將icon拖入到左邊的圖標中(右邊的是視網(wǎng)膜屏用的圖標,我們這里沒有提供這個圖標,所以就空著吧)
好了,編譯運行一下程序,程序啟動后,按Home鍵回到桌面,然后進入Settings,在Settings主界面的最下面,可以找到我們創(chuàng)建的AppSettings程序圖標
點擊該圖標,就會進入這個程序的設(shè)置
上圖中我們可以看到在Root.plist中我們設(shè)置的項還原出來的結(jié)果,首先是一個Group,Group的Title為General Info,然后在Group中是一個TextField的項,它的Title是Username。
OK,到此位置,你應(yīng)該對Settings有所了解,知道里面的項是怎么產(chǎn)生的,每個項的屬性的作用等等。下面我們接著添加更多的不同類型的項,全面的對Settings進行操作。
3)添加其他的項
添加Secure Text Field
先將Item 1閉合,然后選中它,按鍵盤上的command+C,command+V,復(fù)制粘貼一份Item,一個新的Item 2會出現(xiàn)在Item 1的下面
展開Item 2,并將其下的屬性設(shè)置為下面的樣子
如上圖所示,Item 2是用于接收密碼的,它的Type類型還是為PSTextFieldSpecifier,將它的Title設(shè)為Password,Key為password,這里多了一個新的屬性叫做IsSecure,當(dāng)將它的值設(shè)為YES時,那么在文本框中內(nèi)容就會以密碼的方式顯示。(你可以編譯運行一下,看看是不是這個密碼框的效果)
添加Multivalue Field
Multivalue Field會產(chǎn)生一個帶箭頭的cell,點擊該行后,會跳轉(zhuǎn)到下一個table view,下一個table view中會包含多個選項,用戶在多個選項中選取其中的一個,然后返回到前一個view,該cell中的內(nèi)容就是用戶選取的內(nèi)容。
我們合攏Item 2,然后選中Item 2,按return鍵新建Item 3,選擇Item 3的類型為Multi Value
展開Item 3,可以看到,Type的類型為PSMultiValueSpecifier。將Title設(shè)置為Protocol,Key設(shè)置為protocol。
ok,下面我們會添加一組Titles和Values,Titles保存每一個選項的顯示值,Values中保存每一個選項的id,他們是一一對應(yīng)的。保持Item 3展開的形態(tài),然后選中Item 3,按return鍵(在Item展開的形態(tài)下選中并按retuan鍵,是添加當(dāng)前項的子項;在Item閉合的形態(tài)下選中幫按return鍵,是添加同級系項),會新建一個Item 3的子項并出現(xiàn)一個下拉框選中子項的類型,在這里我們選擇Titles。
重復(fù)上面的動作,再創(chuàng)建一個Item 3的子項,并選擇Values。
選中Titles,然后點擊加號,添加一個子項,賦值為HTTP
重復(fù)這個動作,添加以下值SMTP,NNTP,IMAP,POP3
使用同樣的方法,為Values添加項,添加完后的樣子如下
Values和Titles不同之處在于一個是小寫一個是大寫,當(dāng)然,如果你全部使用大寫或者小寫也是沒有問題的,看個人喜好了。
編譯運行一個程序
在Passwrod中輸入密碼,顯示的是一個一個的小圓點。Protocol項的右邊多了一個箭頭,點擊該項,跳轉(zhuǎn)到下一個view
這里就是我們剛才添加的Titles的內(nèi)容,我們隨意選中一個
選中SMTP后的狀態(tài),然后我們點擊左上角的AppSettings按鈕返回上一級view
剛才選中的SMTP就顯示在Protocol項的右邊。
添加Toggle Switch Settings
Toggle Switch很簡單,就是一個switch,可以選擇打開或者關(guān)閉,這個類型的目的是設(shè)置一個bool值。
合攏Item 3,然后選中,按return鍵,添加一個Item 4,并設(shè)置Item 4的類型為Toggle Switch,展開Item 4,設(shè)置Title為“Warp Drive”,Key為“warp”,將DefaultValue的值改為YES
好了,編譯運行一下,一個Switch出現(xiàn)在Protocol的下面
添加Slider Setting
Slider我們已經(jīng)熟知,在Settings中,一個Slider可以在其2端各放置一副圖片(但我發(fā)現(xiàn)在iphone中放置圖片的例子不多),Slider本身沒有帶文字說明,我們也不可以在Settings中放置一個label告知用戶這個slider的作用是什么,因此這里的解決方案是添加一個新的Group,然后為Group添加文字說明,告知用戶slider的作用。
合攏Item 4,并選中,按return鍵,添加Item 5,選擇Item 5的類型為Group,并設(shè)置Title值為“Warp Factor”
合攏Item 5,并選中,按return鍵,添加Item 6,選擇Item 6的類型為Slider,根據(jù)下圖設(shè)置Item 6的屬性
編譯運行一下程序,效果如下
剛才我們說了,Slider的兩端可以各添加一個圖片(圖片的大小為21 * 21 pixel),我們現(xiàn)在就來添加,先下載這里的圖片
為slider添加image的方法有些特殊,我們并不是直接將圖片拖到project navigator中,然后放到slider中,Settings并沒有為我們提供這樣的方法。我們使用別的方法添加,首先在Project navigator中鼠標右擊Settings.bundle,選擇Show in Finder
在Finder中右擊Settings.bundle,選擇“顯示包內(nèi)容”(Show Package Contents)
然后將2張圖片復(fù)制進包里面,然后在Project navigator中也能夠看見這2張圖片了
接著打開Root.plist,在Item 6中添加2項Max Value Image Filename和Min Value Image Filename,為Max賦值rabbit,為Min賦值turtle
再次編譯運行,2張圖片出現(xiàn)在slider的左右2邊。
添加一個Child Settings View
這個意思就是單擊table view上的一個cell,跳轉(zhuǎn)到另一個Settings view。經(jīng)過上面的一些講解,我們實際上都是在對plist進行操作,由此可以推斷出,所有的Settings都是以一個一個的plist文件,因此如果要跳轉(zhuǎn)到另一個Settings view,那必須包含另一個plist,根據(jù)這個思路,我們進行下面的操作。
我們再創(chuàng)建一個Group,創(chuàng)建在Item 6的下面,并命名為Title
然后我們在Item 7的下面添加Item 8,按照之前的方式,現(xiàn)在我們應(yīng)該設(shè)置Item 8的類型了,但是在默認的下拉框中并沒有我們需要的類型(Child Pane),不急,我們展開Item 8(在這里確保你選擇了Show Raw Keys/Values),然后點擊其Type行的Value列最后邊的按鈕,會出現(xiàn)一個下拉框
在下拉框中選擇PSChildPaneSpecifier,這樣Item 8的類型就是一個Child Pane了。
接著設(shè)置Title為“More Settings”,Key空著,因為這是一個起到導(dǎo)航作用的Item,我們無需得到它的值,也就不需要它的Key了。
再接著我們選中最后一行Key,按return鍵添加一個,在下拉菜單中選擇File
我們需要關(guān)聯(lián)一個plist文件,這樣就可以導(dǎo)航到另一個Settings view了,下載這里的More.plist,還記得剛才我們是如何為slider添加2個圖片的嗎?在Project navigator中鼠標右擊Settings.bundle,然后選擇Show in Finder,在Finder中鼠標右擊Setting.bundle,選擇Show Package Contents,將More.plist復(fù)制進去,這樣在Project navigator中就出現(xiàn)More.plist了。
由于More.plist是現(xiàn)成幫我們做好了,因為我們不需對其進行任何操作,直接用就可以了。編譯運行程序
Settings view的底部多了我們剛才添加的More Settings,點擊More Settings,跳轉(zhuǎn)到More.plist的Settings view
可以看到在More中前4個都是Text Field,最后一個是Mulitvalue Field,之后大家隨便點吧,反正也就這些東西了。
4)總結(jié)
到此為止,所有可以在Settings中添加的控件都已經(jīng)介紹了,總類不是很多,一共6種,而對于Settings的操作,也就是對一個plist文件的操作,iOS系統(tǒng)會自動將plist中的內(nèi)容反應(yīng)到Settings上去,我們只需針對plist進行操作,就可以很簡單的完成Settings view的設(shè)置。在下一篇中,我們將把Settings中的值和真正的app程序連接起來,在Settings中設(shè)置值后,在app中會反應(yīng)出來,在app中對一個值進行更改,在Settings中的這個值同樣會被更新,連接這兩個東西的橋梁就是之前提到的NSUserDefaults,我們在下一篇中進行詳細的介紹,謝謝!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。