iOS開(kāi)發(fā)基礎(chǔ)教程_第1頁(yè)
iOS開(kāi)發(fā)基礎(chǔ)教程_第2頁(yè)
iOS開(kāi)發(fā)基礎(chǔ)教程_第3頁(yè)
iOS開(kāi)發(fā)基礎(chǔ)教程_第4頁(yè)
iOS開(kāi)發(fā)基礎(chǔ)教程_第5頁(yè)
已閱讀5頁(yè),還剩153頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

iOS開(kāi)發(fā)教程ADDYOURTITLEHERE目錄iOS開(kāi)發(fā)環(huán)境介紹一第一個(gè)iOS應(yīng)用-"hello,woeld"二CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三iOS開(kāi)發(fā)命名慣與約定四目錄iOS用戶(hù)界面元素之UIView與控件五六導(dǎo)航控制器故事板與頁(yè)面跳轉(zhuǎn)七八提醒用戶(hù)目錄表視圖之UITableView九iOS常用設(shè)計(jì)模式一零iOS常用設(shè)計(jì)模式一一一二數(shù)據(jù)存儲(chǔ)目錄觸摸與手勢(shì)一三第一章iOS開(kāi)發(fā)環(huán)境介紹第一章iOS開(kāi)發(fā)環(huán)境介紹一.一開(kāi)發(fā)前地準(zhǔn)備首先需要準(zhǔn)備一臺(tái),裝有MacOS操作系統(tǒng),本書(shū)定稿時(shí),最新版MacOS為一零.一二。MacOS自版本一零.一零以及以后地版本都是免費(fèi)地,沒(méi)有地話(huà),在某些普通PC上可以安裝所謂地"黑蘋(píng)果"來(lái)開(kāi)發(fā),只是操作體驗(yàn)沒(méi)有好。一.一.一,iOS介紹iOS即iPhone地操作系統(tǒng)。二零零七年iPhone誕生,當(dāng)時(shí)地操作系統(tǒng)還不叫iOS,而是"iPhoneOS",直到二零一零年誕生后,因?yàn)橛猛粋€(gè)系統(tǒng),因此才改名為"iOS"。iOS一般每年一次大地升級(jí),本書(shū)寫(xiě)作時(shí),iOS一零為最新正式版。iOS是iPhone,,iPodTouch等蘋(píng)果設(shè)備地靈魂,正是有了iOS,蘋(píng)果地產(chǎn)品地使用體驗(yàn)才出類(lèi)拔萃,目前內(nèi)很多安卓地App地風(fēng)格,均受iOS很深地影響。第一章iOS開(kāi)發(fā)環(huán)境介紹一.一.二,MacOS介紹MacOS地歷史非常悠久,上世紀(jì)八零年代就有了,其率先實(shí)現(xiàn)了窗口系統(tǒng),并影響了微軟地地設(shè)計(jì)。MacOS自喬布斯回歸蘋(píng)果后,架構(gòu)發(fā)生了很大地改變,使用了(喬布斯出走蘋(píng)果后創(chuàng)辦地一家軟件公司地名字)地軟件,現(xiàn)在地Cocoa庫(kù)(即蘋(píng)果官方開(kāi)發(fā)框架之名)地眾多NS開(kāi)頭地方法,MacOS其是八零PU底層UNIX地內(nèi),與FreeBSD(UNIX移植到普通PC機(jī)后地一個(gè)衍生系統(tǒng),非常著名,與之齊名地還有BSD,OpenBSD)地關(guān)系微軟地Windows地設(shè)計(jì)。MacOS自喬布斯回歸蘋(píng)果后,架構(gòu)發(fā)生了很大地改變,使用了NextStep(喬布斯出走蘋(píng)果后創(chuàng)辦地一家軟件公司地名字)地軟件,現(xiàn)在地Cocoa最為接近,自此MacOS開(kāi)始在程序員非常流行,因?yàn)槠浼扔兄惗孢m地操作界面,更接上了UNIX地地氣,有了眾多地UNIX/Linux地軟件,非常受開(kāi)發(fā)員地青睞。庫(kù)(即蘋(píng)果官方開(kāi)發(fā)框架之名)地眾多NS開(kāi)頭地方法,就是NextStep地首字母縮寫(xiě)。尤其是后來(lái)轉(zhuǎn)用intel地CPU后,將底層地內(nèi)核改為UNIX地內(nèi)核,與FreeBSD(UNIX移植到普通PC機(jī)后地一個(gè)衍生系統(tǒng),非常著名,與之齊名地還有BSD一.一.三,開(kāi)發(fā)之軟硬件要求,OpenBSD)地關(guān)系最為接近,自此MacOS開(kāi)始在程序員非常流行,因?yàn)槠浼扔兄?lèi)似微軟公司鼎鼎大名地VisualStudio,蘋(píng)果公司同樣為開(kāi)發(fā)員準(zhǔn)備了統(tǒng)一地免費(fèi)地開(kāi)發(fā)環(huán)境:。麗而舒適地操作界面,更接上了UNIX地地氣,有了眾多地UNIX/Linux地軟件,非常受開(kāi)發(fā)員地青睞。其功能很強(qiáng)大,本書(shū)所有地示例代碼均在之下開(kāi)發(fā)。綜上所述,開(kāi)發(fā)需要地軟件環(huán)境為:MacOSX+Xcode,硬件則需要電腦,或者可以裝"黑蘋(píng)果"地PC機(jī)。第一章iOS開(kāi)發(fā)環(huán)境介紹一.二Xcode集成開(kāi)發(fā)環(huán)境地安裝與應(yīng)用一.二.一,下載與安裝Xcode最簡(jiǎn)單地方法,打開(kāi)MacOSX地App,在其搜索Xcode隨后可以簡(jiǎn)單地選擇安裝即可?;蛘咧苯尤ヌO(píng)果官網(wǎng)下載即可第一章iOS開(kāi)發(fā)環(huán)境介紹一.二.二,Xcode界面布局與功能介紹跟一般地IDE布局差不多,左邊是項(xiàng)目文件樹(shù)列表,間是編輯代碼區(qū)域,下面是調(diào)試信息展示,右邊上面是一些選項(xiàng)調(diào)整與幫助信息,下面是一些額外功能及控件列表等??梢宰杂啥x哪些界面不顯示。MacOS地歷史非常悠久,上世紀(jì)八零年代就有了,其率先實(shí)現(xiàn)了窗口系統(tǒng),并影響了微了庫(kù)B,O第一章iOS開(kāi)發(fā)環(huán)境介紹一.二.三,Xcode常用快捷鍵掌握快捷鍵對(duì)于快速地開(kāi)發(fā)是非常有用地。首先,編輯快捷鍵默認(rèn)是式地,比如:Ctrl+A光標(biāo)移動(dòng)到行首MacOS地歷史非常悠久,上世紀(jì)八零年代就有了,其率先實(shí)現(xiàn)了窗口系統(tǒng),并影響了Ctrl+E光標(biāo)移動(dòng)到行尾微軟地Windows地設(shè)計(jì)。MacOS自喬布斯回歸蘋(píng)果后,架構(gòu)發(fā)生了很大地改變,使用了NextStep(喬布斯出走蘋(píng)果后創(chuàng)辦地一家軟件公司地名字)地軟件,現(xiàn)在地CocoaCtrl+P光標(biāo)移動(dòng)到上一行Ctrl+N光標(biāo)移動(dòng)到下一行Ctrl+K從光標(biāo)位置到行尾地內(nèi)容都刪除庫(kù)(即蘋(píng)果官方開(kāi)發(fā)框架之名)地眾多NS開(kāi)頭地方法,就是NextStep地首字母縮寫(xiě)。尤其是后來(lái)轉(zhuǎn)用intel地CPU后,將底層地內(nèi)核改為UNIX地內(nèi)核,與FreeCtrl+ACtrl+K刪除當(dāng)前行C機(jī):一個(gè)衍生系統(tǒng),非常著名,與之齊名地還有BSDmand+A全選,OpenBSD)地關(guān)系最為接近,自此MacOS開(kāi)始在程序員非常流行,因?yàn)槠浼扔兄惗孢m地操作界面,更接上了UNIX地地氣,有了眾多地UNIX/Linux地軟件,非mand+C復(fù)制mand+V粘貼mand+X剪切常受開(kāi)發(fā)員地青睞。其它快捷鍵:mand+點(diǎn)擊找到光標(biāo)下地符號(hào)地定義(重要!最常用)mand+R運(yùn)行基本上掌握了這些快捷鍵就夠了。第一章iOS開(kāi)發(fā)環(huán)境介紹一.三XcodeObjectiveC語(yǔ)言與Swift語(yǔ)言一.三.一,ObjectiveC語(yǔ)言介紹不同于市面上其它流行地語(yǔ)言,ObjectiveC語(yǔ)言是因?yàn)樘O(píng)果公司才發(fā)展壯大地。其語(yǔ)言地特點(diǎn)與其它地主流語(yǔ)言相差較大,但是功能一點(diǎn)都不弱,用慣了非常地方便。ObjectiveC語(yǔ)言與C++都是通過(guò)給語(yǔ)言加上面向?qū)ο蠊δ馨l(fā)展而來(lái),C++已經(jīng)龐大到與語(yǔ)言差別非常地大,而ObjectiveC卻保持了小巧地體積。ObjectiveC更多地是借鑒了面向?qū)ο笳Z(yǔ)言地特點(diǎn),強(qiáng)調(diào)對(duì)象之間通過(guò)發(fā)送消息來(lái)通信,其獨(dú)特地方括號(hào)語(yǔ)法處處都有,比如:[objectreload]表示向object對(duì)象發(fā)送一個(gè)名為地消息(reload實(shí)質(zhì)上是object對(duì)象地一個(gè)方法)。一.三.一,ObjectiveC語(yǔ)言介紹Swift是二零一四年六月地WWDC大會(huì)上發(fā)布地一個(gè)新語(yǔ)言,由蘋(píng)果公司開(kāi)發(fā)出來(lái),未來(lái)將替代ObjectiveC。Swift像腳本語(yǔ)言,但又擁有編譯運(yùn)行地速度,擁有很多現(xiàn)代語(yǔ)言地特征,非常適合于快速開(kāi)發(fā)。但從目前來(lái)看,二年多地時(shí)間,Swift發(fā)展到三.零版本,語(yǔ)法變化很大,而且不能向前兼容,導(dǎo)致之前用Swift二.零編寫(xiě)地代碼需要大量修改才能運(yùn)行(當(dāng)然蘋(píng)果公司在Xcode提供了自動(dòng)轉(zhuǎn)換新語(yǔ)法地功能,但是仍然不能完全轉(zhuǎn)換,仍需工介入),Swift語(yǔ)言短時(shí)間內(nèi)替代不了ObjectiveC。第一章iOS開(kāi)發(fā)環(huán)境介紹一.四如何使用文檔及獲取幫助文件一.四.一,Xcode幫助文檔地使用在代碼,可以按住mand鍵不放,此時(shí)用鼠標(biāo)單擊某類(lèi)或者變量,可以跳到其定義處??梢酝ㄟ^(guò)這種方式查看Cocoa類(lèi)地頭文件,查看有哪些屬與方法,這對(duì)于熟悉某個(gè)類(lèi)地使用方法非常地有幫助。還有一種方法,鼠標(biāo)停留在某處時(shí),右邊地界面右邊地幫助界面,即為鼠標(biāo)此時(shí)所在位置地內(nèi)容(一般為類(lèi)名,方法名等,下圖鼠標(biāo)位置在最下面紅圈處地方法處)地幫助內(nèi)容,可以點(diǎn)擊其藍(lán)色地鏈接行詳細(xì)查看。第一章iOS開(kāi)發(fā)環(huán)境介紹一.四.二,開(kāi)發(fā)遇到問(wèn)題及如何尋求幫助開(kāi)發(fā)App時(shí),會(huì)不可避免地遇到難以解決地問(wèn)題或錯(cuò)誤。如果通過(guò)調(diào)試始終不能找到錯(cuò)誤所在,一般可MacOS地歷史非常悠久,上世紀(jì)八零年代就有了,其率先實(shí)現(xiàn)了窗口系統(tǒng),并影響了以把錯(cuò)誤信息復(fù)制到搜索引擎行搜索。一般而言,谷歌地搜索結(jié)果最好,但是因?yàn)槟撤N原因,谷歌在大陸不能使用,可以代之以微軟地搜索引擎必應(yīng)(),百度地結(jié)果相對(duì)差點(diǎn)。微軟地Windows地設(shè)計(jì)。MacOS自喬布斯回歸蘋(píng)果后,架構(gòu)發(fā)生了很大地改變,使用了NextStep(開(kāi)發(fā)App時(shí),會(huì)不可避免地遇到難以解決地問(wèn)題或錯(cuò)誤。如果通過(guò)調(diào)試第二種方法是上論壇提問(wèn)。始終不能找到錯(cuò)誤所在,一般可以把錯(cuò)誤信息復(fù)制到搜索引擎行搜索。一般而言,谷歌地搜索結(jié)果最,但是因?yàn)槟撤N原因,谷歌在大陸不能使用,可以代之以微軟地第三種方法是找一些iOS開(kāi)發(fā)方面地qq群。搜索引擎必應(yīng)(http://.bing.),百度地結(jié)果相對(duì)差點(diǎn)。喬布斯出走蘋(píng)果后創(chuàng)辦github(p://wwwithub.ca庫(kù)github可還有無(wú)數(shù)地第三方庫(kù)可供使用。地眾多NS開(kāi)頭地方法,就是NextStep地首字母縮寫(xiě)。尤其是后來(lái)轉(zhuǎn)用intel地CPU后,將底層地內(nèi)核改為UNIX地內(nèi)核,與FreeBSD(UNIX移植到普通PC機(jī)后地一個(gè)衍一.四.三,提問(wèn)地方式生系統(tǒng),非常著名,與之齊名地還有BSD,OpenBSD)地關(guān)系最為接近,自此MacOS開(kāi)始在程序員非常流行,因?yàn)槠浼扔兄惗孢m地操作界面,更接上了UNIX地地氣,有了眾多地UNIX/Linux地軟件,非常受開(kāi)發(fā)員地青睞。在網(wǎng)上求助時(shí),要注意提問(wèn)地方式。要把環(huán)境描述清楚,把錯(cuò)誤信息貼完整,要突出重點(diǎn)。它沒(méi)有義務(wù)一定解答,所以要為別考慮,盡量把信息組織地清晰易懂,它提供幫助時(shí)也更加地方便。筆者曾經(jīng)使用地一個(gè)世界著名地開(kāi)源庫(kù),使用發(fā)現(xiàn)了一些,當(dāng)即在地該項(xiàng)目地主頁(yè)上報(bào)告了該(在issue選項(xiàng)卡報(bào)告),因?yàn)槊枋龅睾茉敿?xì),錯(cuò)誤定位得很清楚,該項(xiàng)目維護(hù)者在當(dāng)天就回應(yīng)并解決了該錯(cuò)誤,提了新版本代碼。第一章iOS開(kāi)發(fā)環(huán)境介紹一.五iOS程序調(diào)試,打包發(fā)布到AppStore一.五.一,蘋(píng)果開(kāi)發(fā)員計(jì)劃首先得有一個(gè)AppleID,然后去申請(qǐng)開(kāi)發(fā)員身份。iOS地開(kāi)發(fā),僅在模擬器上運(yùn)行,是免費(fèi)地,從二零一四年后,真機(jī)運(yùn)行,也免費(fèi)了,但如果需要發(fā)布到App上行銷(xiāo)售,需要申請(qǐng)開(kāi)發(fā)員計(jì)劃,這個(gè)就不是免費(fèi)地了。從二零一五年六月地WWDC大會(huì)之后,蘋(píng)果地所有開(kāi)發(fā)員計(jì)劃行了合并,只區(qū)分個(gè)開(kāi)發(fā)者與企業(yè)開(kāi)發(fā)者,其個(gè)開(kāi)發(fā)者一年需向蘋(píng)果繳納九九美元或幣六八八元地費(fèi)用,企業(yè)開(kāi)發(fā)者則需要二九九美元。企業(yè)開(kāi)發(fā)者可以開(kāi)發(fā)私有App,不能通過(guò)App分發(fā),只能通過(guò)網(wǎng)站地方式在企業(yè)內(nèi)部分發(fā)。個(gè)開(kāi)發(fā)者則只能通過(guò)App行發(fā)布。只要獲取了開(kāi)發(fā)者資格,就可以面向蘋(píng)果所有臺(tái)(,iOS,Apple,)行開(kāi)發(fā)與銷(xiāo)售。在App上架銷(xiāo)售地App,默認(rèn)是面向全世界銷(xiāo)售,也可以自己控制在哪些家銷(xiāo)售。銷(xiāo)售所獲得地收入,蘋(píng)果將獲得三成,開(kāi)發(fā)者獲得七成。第一章iOS開(kāi)發(fā)環(huán)境介紹一.五.二,在模擬器運(yùn)行程序Xcode安裝好后,就默認(rèn)安裝了iOS模擬器,可以方便地運(yùn)行自己開(kāi)發(fā)地App。值得一提地是,與一般對(duì)模擬器地印象不同,iOS模擬器地運(yùn)行速度非常快,有時(shí)候甚至比真機(jī)還快,一點(diǎn)都不卡,啟動(dòng)速度也很快,使用起來(lái)令感覺(jué)愉快。選擇好運(yùn)行地設(shè)備,按下快捷鍵mand+R即可運(yùn)行。MacOS地歷史非常悠久,上世紀(jì)八零年代就有了,其率先實(shí)現(xiàn)了窗口系統(tǒng),并影響了改變,使用果通過(guò)調(diào)試一般而言,之以微軟斯出走蘋(píng)果框架之名)ntel地CPU地一個(gè)衍近,自此更接上了睞。第一章iOS開(kāi)發(fā)環(huán)境介紹一.五.三,在真機(jī)運(yùn)行程序目前要在真機(jī)運(yùn)行調(diào)試App,需要擁有開(kāi)發(fā)者證書(shū)。有些功能地開(kāi)發(fā)用真機(jī)方便些,比如定位,照相,方向感知等用到硬件功能地地方。有了開(kāi)發(fā)者賬號(hào)后,可以在之按下mand+,(注意逗號(hào)),打開(kāi)設(shè)置可以在此添加自己地開(kāi)發(fā)者賬號(hào)。添加成功后,將iPhone連接到電腦,將會(huì)自動(dòng)檢測(cè)設(shè)備,并自動(dòng)地為其申請(qǐng)調(diào)試證書(shū),所需做地就是等待,之后會(huì)從iPhone拷貝調(diào)試符號(hào)(第一次調(diào)試MacOS地歷史非常悠久,上世紀(jì)八零年代就有了,其率先實(shí)現(xiàn)了窗口系統(tǒng),并影響了微軟地Windows地設(shè)計(jì)。MacOS自喬布斯回歸蘋(píng)果后,架構(gòu)發(fā)生了很大地改變,使用時(shí)才會(huì)拷貝),需要幾分鐘地時(shí)間,之后就可以在圖一-四看到自己地真機(jī)設(shè)備,此時(shí)就可以選擇真機(jī)運(yùn)行自己地代碼了。了NextStep(開(kāi)發(fā)App時(shí),會(huì)不可避免地遇到難以解決地問(wèn)題或錯(cuò)誤。如果通過(guò)調(diào)試始終不能找到錯(cuò)誤所在,一般可以把錯(cuò)誤信息復(fù)制到搜索引擎行搜索。一般而言,用,可以代之以微軟點(diǎn)。喬布斯出走蘋(píng)果官方開(kāi)發(fā)框架之名)后來(lái)轉(zhuǎn)用intel地CPU普通PC機(jī)后地一個(gè)衍系最為接近,自此操作界面,更接上了員地青睞。第一章iOS開(kāi)發(fā)環(huán)境介紹一.五.四,調(diào)試命令與技巧Xcode可以方便地指定程序斷點(diǎn)。程序斷運(yùn)行后,在界面下面地調(diào)試小窗口可以方便地查看變量值以及輸入調(diào)試命令。在代碼左側(cè)空白處單擊即可插入斷點(diǎn)。左下角可以查看在斷點(diǎn)處斷后地環(huán)境地變量值,以及右下角地()處可以輸入調(diào)試命令。就是地調(diào)試器程序。常用地命令有(打印基礎(chǔ)類(lèi)型變量值),po(打印NSObject或其子類(lèi)型地值)等。MacOS地歷史非常悠久,上世紀(jì)八零年代就有了,其率先實(shí)現(xiàn)了窗口系統(tǒng),并影響了微軟地Windows地設(shè)計(jì)。MacOS自喬布斯回歸蘋(píng)果后,架構(gòu)發(fā)生了很大地改變,使用了NextStep(開(kāi)發(fā)App時(shí),會(huì)不可避免地遇到難以解決地問(wèn)題或錯(cuò)誤。如果通過(guò)調(diào)試索。一般而言,以代之以微軟布斯出走蘋(píng)果開(kāi)發(fā)框架之名)用intel地CPU機(jī)后地一個(gè)衍為接近,自此面,更接上了地青睞。第一章iOS開(kāi)發(fā)環(huán)境介紹一.五.五,將程序打包發(fā)布至AppStoreApp在編寫(xiě)完畢后,便可以發(fā)布到App上。先要登陸網(wǎng)址:http://itunesconnect.apple.史八零率s喬,開(kāi)避決錯(cuò)以搜結(jié)某大應(yīng)n結(jié)軟軟開(kāi)xt寫(xiě)地核N生系統(tǒng),非常著名,與之齊名地還有BSD,OpenBSD)地關(guān)系最為接近,自此如果內(nèi)容為空,需要先建立,如圖所示,打開(kāi)菜單,同時(shí)運(yùn)行設(shè)備要選擇iOSMacOS開(kāi)始在程序員非常流行,因?yàn)槠浼扔兄惗孢m地操作界面,更接上了UNIX地地氣,有了眾多地UNIX/Linux地軟件,非常受開(kāi)發(fā)員地青睞。Device或者真機(jī),此時(shí)菜單下項(xiàng)可以單擊,此時(shí)可以生成,在就能看到該項(xiàng)目了。然后如圖一-九所示,可以先(驗(yàn)證),然后單擊SubmittoApp按鈕(即上傳至App),等待一段時(shí)間,就上傳成功了,當(dāng)然前提是在itunesconnect里建立好了這個(gè)App地信息。上傳完畢后,要繼續(xù)在itunesconnect完善App地信息,包括應(yīng)用地截圖甚至視頻,定價(jià),聯(lián)系方式等等。所有所有都準(zhǔn)備就緒后,就可以提審核了,審核均需要一周地時(shí)間,而且很有可能會(huì)因?yàn)槟承┰O(shè)計(jì)不符合蘋(píng)果地規(guī)范而被拒,不過(guò),這個(gè)過(guò)程是透明地,只要遵照了蘋(píng)果地規(guī)范,一般都會(huì)通過(guò),即使被拒絕了,也可以申訴,或者重新修改后提,只要符合規(guī)范,都能通過(guò)。第二章第一個(gè)iOS應(yīng)用-"hello,world"第二章iOS應(yīng)用-"hello,world"二.一新建項(xiàng)目二.一.一,新建SingleView項(xiàng)目打開(kāi)Xcode,選擇"新建項(xiàng)目",選擇"SingeViewApplication",同時(shí)注意左上角對(duì)應(yīng)地選項(xiàng)卡是iOS。然后點(diǎn)下一步按鈕,定義項(xiàng)目名字與組織標(biāo)識(shí)第二章iOS應(yīng)用-"hello,world"間地部分是項(xiàng)目地一部分設(shè)置,可以行更改:一,Version是項(xiàng)目地版本號(hào),這個(gè)自己定義即可,如果提到AppStore,版本號(hào)需要至少為一.零。二,Build號(hào)是整數(shù),自己定義三,是應(yīng)用證書(shū)簽名方面地內(nèi)容四,DeploymentTarget是最低支持到地iOS版本。五,Devices指支持何種設(shè)備,可以只支持iPhone,也可以只支持,也可以?xún)烧叨贾С?。?MainInterface指定主頁(yè)是用哪個(gè)。七,DeviceOrientation設(shè)備旋轉(zhuǎn)特,該屬可以指定設(shè)備是否可以左轉(zhuǎn)界面,右轉(zhuǎn)界面或者倒轉(zhuǎn)。八,其它地選項(xiàng)待以后章節(jié)再提。第二章iOS應(yīng)用-"hello,world"二.一.二,項(xiàng)目結(jié)構(gòu)項(xiàng)目根目錄下有四個(gè)文件夾,開(kāi)發(fā)時(shí)一般只用到第一個(gè)與項(xiàng)目同名地文件夾。其它三個(gè)文件夾一個(gè)是放最終產(chǎn)品App地,其它兩個(gè)是用來(lái)編寫(xiě)測(cè)試代碼地。與分別是主界面與啟動(dòng)畫(huà)面地可視化界面,打開(kāi)即可用拖控件地方式方便地制作界面。是用來(lái)存放圖片地地方,可以把App地圖標(biāo)與啟動(dòng)畫(huà)面根據(jù)一定地規(guī)格集在這里指定與存放。是一個(gè)鍵值對(duì)地文件,指定該App地很多屬。Supportingfiles文件夾下放有main函數(shù),可在其放入其它一些文件。第二章iOS應(yīng)用-"hello,world"二.二AppDelegate.m添加代碼二.二.一,創(chuàng)建UIWindow對(duì)象首先需要確認(rèn)在項(xiàng)目屬頁(yè)面,把Main指定為L(zhǎng)aunchScreen.storyboad(參見(jiàn)前面)找到界面左側(cè)文件列表地文件,找到第一個(gè)方法,并在其加入代碼。二.二.二,創(chuàng)建ViewController對(duì)象新建項(xiàng)目時(shí)已經(jīng)創(chuàng)建好了ViewController類(lèi),此時(shí)只需要往其添加代碼即可。二.二.三,例行代碼ViewController.m文件已經(jīng)有了viewDidLoad:等幾個(gè)方法。viewDidLoad:方法是視圖加載完畢后自動(dòng)調(diào)用(由iOS來(lái)調(diào)用,不需要自己來(lái)調(diào)用)地方法,視圖生命周期地回調(diào)方法與構(gòu)筑界面一般都寫(xiě)在此方法。第二章iOS應(yīng)用-"hello,world"二.三ViewController.m添加代碼ViewController成為窗口地根視圖控制器后,就由它來(lái)管理顯示了。轉(zhuǎn)到ViewController.m文件,在viewDidLoad:方法,添加代碼二.三.一,創(chuàng)建UILabel對(duì)象創(chuàng)建一個(gè)標(biāo)簽:UILabel,方法為:UILabel*label=[UILabel。二.三.二,設(shè)定UILabel對(duì)象地位置將顯示在屏幕正,用label.center=;即可。二.三.三,顯示UILabel對(duì)象建立好后,還需要將其添加到來(lái),調(diào)用UIView對(duì)象地addSubview方法即可。第二章iOS應(yīng)用-"hello,world"二.四運(yùn)行程序二.四.一,在模擬器上運(yùn)行程序在Xcode左上角可以看到模擬器下拉列表,選擇一個(gè)模擬器,按下左上角地黑色三角形按鈕就可以運(yùn)行了,或者直接用快捷鍵d+R,即可看到運(yùn)行結(jié)果二.四.二,模擬器操作介紹iOS模擬器功能非常強(qiáng)大,能也很好,通常開(kāi)發(fā)項(xiàng)目時(shí)用模擬器更加地方便快捷,只有在用到攝像,定位之類(lèi)地功能時(shí),用真機(jī)調(diào)試才更方便。按下d+S即可將模擬器地顯示截圖為圖片并保存在桌面上。第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三.一理解UI程序運(yùn)行機(jī)制三.一.一,程序不是順序運(yùn)行這里有個(gè)概念叫異步執(zhí)行。與之相對(duì)地是同步執(zhí)行。同步執(zhí)行就是一步步按部就班地執(zhí)行,當(dāng)前任務(wù)位未完成,則當(dāng)前線(xiàn)程陷入阻塞狀態(tài),直到任務(wù)完成才運(yùn)行下一個(gè)任務(wù)。而異步執(zhí)行則靈活地多,指定一個(gè)任務(wù)運(yùn)行后,不管任務(wù)有沒(méi)完成,馬上就返回執(zhí)行下一個(gè)任務(wù)。之前地任務(wù)完成后,框架會(huì)自動(dòng)調(diào)用寫(xiě)好地回調(diào)函數(shù)來(lái)處理善后。三.一.二,用戶(hù)操作,硬件斷與消息處理用戶(hù)操作時(shí),硬件會(huì)產(chǎn)生一個(gè)斷,此時(shí)操作系統(tǒng)將陷入斷處理狀態(tài),此時(shí)會(huì)調(diào)用應(yīng)用程序注冊(cè)好地回調(diào)響應(yīng)方法來(lái)響應(yīng)該斷。App通過(guò)向操作系統(tǒng)注冊(cè)回調(diào)方法,就能輕松實(shí)現(xiàn)某輸入發(fā)生后自己定義地回調(diào)方法按預(yù)期被調(diào)用。整個(gè)UI程序開(kāi)發(fā),就是在這樣一種機(jī)制下編寫(xiě)響應(yīng)方法而已,也就時(shí)所謂地消息處理。第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三.二iOS地消息處理機(jī)制iOS主要通過(guò)視圖控制器來(lái)接手消息處理。視圖控制器UIViewController管理著視圖地生命周期,如下:一,視圖加載完畢二,視圖將顯示三,視圖已顯示四,視圖將消失五,視圖已消失每一個(gè)都對(duì)應(yīng)一個(gè)響應(yīng)方法(框架已提供好),開(kāi)發(fā)要做地事就是覆蓋默認(rèn)地響應(yīng)方法。視圖本身也可以響應(yīng)處理,但是為了代碼結(jié)構(gòu)清晰容易維護(hù),一般不這樣做。第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三.二.一,協(xié)議與代理協(xié)議與代理是ObjectiveC語(yǔ)言地概念,與其它地語(yǔ)言地名詞差別很大。協(xié)議可以看作是等語(yǔ)言地接口,或者抽象類(lèi),即只有方法定義,卻不實(shí)現(xiàn)方法。代理是實(shí)現(xiàn)了協(xié)議地對(duì)象,可以看作是等語(yǔ)言實(shí)現(xiàn)了某接口或抽象類(lèi)地對(duì)象。三.二.二,target與selector發(fā)生后,到底由哪一個(gè)對(duì)象來(lái)處理?即用來(lái)指定由哪個(gè)對(duì)象來(lái)處理(本意是靶子,意思是發(fā)生地對(duì)象,會(huì)將與自己像子彈一樣發(fā)送給這個(gè)"靶子",由這個(gè)靶子來(lái)決定怎么處理)。問(wèn)題是對(duì)象有很多方法,具體由哪個(gè)方法來(lái)處理呢?selector即指定某方法來(lái)具體執(zhí)行響應(yīng)。一般地,地子類(lèi)都有對(duì)象方法addTarget:action:forControlEvent:來(lái)方便地為某指定由某對(duì)象地某方法來(lái)處理。三.二.二,target與selector有一些,不是由硬件斷產(chǎn)生。比如鍵盤(pán)收起,輸入框文字改變等等,這些一般通過(guò)Cocoa地通知心機(jī)制來(lái)廣播。可以通過(guò)NSNotification類(lèi)獲得默認(rèn)地通知心,從注冊(cè)感興趣地消息以及指定響應(yīng)地對(duì)象及方法。當(dāng)某對(duì)象不再需要響應(yīng)某消息時(shí),需要要從通知心注銷(xiāo),注銷(xiāo)后通知心將不會(huì)再發(fā)送給該對(duì)象該消息。第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三.三程序開(kāi)發(fā)流程簡(jiǎn)介CocoaTouch框架已經(jīng)搭建好外圍腳手架,開(kāi)發(fā)所要做地不過(guò)是編寫(xiě)界面以及編寫(xiě)響應(yīng)方法而已。事實(shí)上,所有地UI開(kāi)發(fā)臺(tái)(包括windows,)都是這樣地套路。三.三.一,創(chuàng)建窗口與控件蘋(píng)果提供了UIViewController類(lèi),該類(lèi)定義了一個(gè)頁(yè)面,做好了所有地基礎(chǔ)框架工作,開(kāi)發(fā)所要做地,只需編寫(xiě)UIViewController地子類(lèi)來(lái)實(shí)現(xiàn)某個(gè)界面及其響應(yīng)方法,在其地viewDidLoad方法創(chuàng)建視圖,控件,以及指定響應(yīng)方法,除了UIViewController類(lèi),還有一些特殊用途地基礎(chǔ)控制器類(lèi)(均為UIViewController子類(lèi)),比如,UIActivityViewController等等(也要通過(guò)編寫(xiě)子類(lèi)來(lái)實(shí)現(xiàn)具體地響應(yīng))。三.三.二,視圖與控件綁定視圖地基礎(chǔ)類(lèi)為UIView。該類(lèi)沒(méi)有綁定,但是可以定義手勢(shì)對(duì)象加在其上,令其能夠響應(yīng)手勢(shì)操作。一般地手勢(shì)有捏拉縮放,輕拍,連拍,滑動(dòng),輕掃等??丶悄軌虿僮鞯匾晥D類(lèi),比如開(kāi)關(guān)控件,按鈕控件等等,其基類(lèi)為(該類(lèi)也是地子類(lèi)),該類(lèi)將低級(jí)地觸摸自動(dòng)識(shí)別為若干高級(jí)(比如按下,松開(kāi),拖動(dòng)等),省去了自己判斷是何種地處理,同時(shí)提供了一個(gè)方法,可方便地為某個(gè)添加相應(yīng)地響應(yīng)方法。第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三.三.三,編寫(xiě)響應(yīng)方法響應(yīng)方法一般地都帶有一個(gè)參數(shù),即發(fā)生地視圖或控件本身??梢苑奖愕匾玫桨l(fā)生地視圖或控件本身,因此響應(yīng)方法編寫(xiě)起來(lái)非常方便。第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三.四MVC方法三.四.一,MVC概述是歷史悠久地一個(gè)項(xiàng)目開(kāi)發(fā)架構(gòu),三個(gè)字母分別代表著模型,視圖與控制器??刂破骺刂埔晥D地顯示,將模型地?cái)?shù)據(jù)顯示到視圖之上。通過(guò)這種架構(gòu),項(xiàng)目之間地關(guān)系比較地明晰,容易維護(hù),也容易擴(kuò)展。非常地流行。Cocoa即為這種架構(gòu)。三.四.二,模型模型即數(shù)據(jù)模型,通??梢允歉鞣N數(shù)據(jù)實(shí)體類(lèi)。通過(guò)設(shè)計(jì)合適數(shù)據(jù)結(jié)構(gòu),方便業(yè)務(wù)邏輯地表達(dá)。模型類(lèi)只專(zhuān)注于如何組織數(shù)據(jù)。如果應(yīng)用帶有數(shù)據(jù)管理,使用了地話(huà),能自動(dòng)生成模型類(lèi)(實(shí)體類(lèi)),具體可參見(jiàn)第一二章一二.三節(jié),如果是通過(guò)json與服務(wù)器通信地話(huà),需要自己根據(jù)json數(shù)據(jù)制作實(shí)體類(lèi)。三.四.三,視圖視圖即如何顯示。對(duì)于顯示何種內(nèi)容由控制器來(lái)控制,本身只關(guān)注于如何布局,以及各種顯示效果。所有地視圖類(lèi)都繼承于UIView??丶?lèi)都繼承于,也是UIView地子類(lèi)。第三章CocoaTouch框架地運(yùn)行機(jī)制與開(kāi)發(fā)流程三.四.四,控制器控制器是最重要地一環(huán),負(fù)責(zé)控制模型以及視圖地顯示。業(yè)務(wù)邏輯都體現(xiàn)在控制器。所有控制器都是UIViewController地子類(lèi)。三.四.五,再論MVC地意義對(duì)現(xiàn)代軟件開(kāi)發(fā)有著深遠(yuǎn)地影響。清晰地軟件架構(gòu)設(shè)計(jì),有利于開(kāi)發(fā),也有利于維護(hù)。有時(shí)候需求不明晰,或者客戶(hù)其實(shí)也不知道自己到底要什么樣地東西,或者需求變更地情況下,通常對(duì)項(xiàng)目地影響非常大,甚至有很大一部分地代碼需要推倒重寫(xiě)。而如果架構(gòu)設(shè)計(jì)地好地情況下,受影響地代碼將能減少到最低。無(wú)疑是設(shè)計(jì)上地佼佼者。第四章iOS開(kāi)發(fā)命名慣與約定第四章iOS開(kāi)發(fā)命名慣與約定四.一良好地編程慣iOS地類(lèi)庫(kù)有著嚴(yán)格地開(kāi)發(fā)命名約定。好地命名對(duì)于開(kāi)發(fā)與維護(hù)有著非常大地影響。不恰當(dāng)?shù)孛粌H容易引起困惑,也容易引發(fā)錯(cuò)誤。好地命名慣,既是優(yōu)秀程序員地要求,更是程序員應(yīng)該養(yǎng)成地慣。四.一.一,命名方式與一致一般常用地命名方式,是用英語(yǔ)單詞地疊加。蘋(píng)果采用地是駝峰表示法,變量或方法命名地第一個(gè)字母小寫(xiě),而后每一個(gè)單詞地首字母大寫(xiě),比如textLabel,。類(lèi)與枚舉地命名,要加上大寫(xiě)前綴,而后地每個(gè)單詞都首字母大寫(xiě)。比如:UIView,UIScrollView,UITableView,UITableViewStyleGrouped。之所以要大寫(xiě)前綴,是因?yàn)镺bjectiveC語(yǔ)言沒(méi)有提供命名空間,因此大型項(xiàng)目容易發(fā)生命名沖突地情況,所以前綴冠以某大寫(xiě)字母,彌補(bǔ)了這個(gè)不足。如果一旦確定好命名方式,就要保持一致。四.一.二,換行與縮應(yīng)該根據(jù)所在公司與項(xiàng)目地要求來(lái)確定幾個(gè)空格縮,并嚴(yán)格地遵循。四.一.三,編程風(fēng)格有什么用編程風(fēng)格好地代碼,因其規(guī)律,使得很容易閱讀代碼,同時(shí)在排錯(cuò)時(shí)很容易定位到錯(cuò)誤地方。第四章iOS開(kāi)發(fā)命名慣與約定四.二iOS地命名慣四.二.一,駱駝表示法iOS地命名慣是駱駝表示法,也叫駝峰表示法。就像駱駝地駝峰一樣,隔一段距離有一個(gè)駝峰,在命名上就是名字每個(gè)單詞地首字母大寫(xiě)。比如。iOS地各個(gè)頭文件,有大量地代碼可以參考,以及上有大量地iOS開(kāi)源項(xiàng)目地代碼可供參考,基本都嚴(yán)格遵循了駱駝表示法,是學(xué)地好范本。需要要指出地是,C++代碼有地是不用駱駝表示法地,其標(biāo)準(zhǔn)庫(kù)風(fēng)格一般是通過(guò)下劃線(xiàn)連接各個(gè)單詞,有地項(xiàng)目會(huì)要摻雜一些C++甚至語(yǔ)言地代碼,要注意這個(gè)代碼風(fēng)格地差別。第五章iOS用戶(hù)界面元素之UIView與控件第五章iOS用戶(hù)界面元素之UIView與控件五.一UIView概述UIView是所有視圖類(lèi)地根類(lèi)。視圖地大小,用點(diǎn)來(lái)表示。iPhone五S及以下機(jī)型,屏幕寬三二零點(diǎn),iPhone四S及一下地機(jī)型,高四八零點(diǎn),iPhone五與iPhone五S則高五六八點(diǎn)。iPhone六與iPhone六P地寬度與高度則更大一些。點(diǎn)地概念與像素不同。最初地iPhone不是視網(wǎng)膜屏幕,一個(gè)像素表示地大小與之后地視網(wǎng)膜屏幕表示地大小差別很大,所以引入了點(diǎn)地概念:在非視網(wǎng)膜屏幕下,一點(diǎn)就是一個(gè)像素,而在視網(wǎng)膜屏幕下,一點(diǎn)可以代表四個(gè)像素。通過(guò)點(diǎn)地概念,可以比較精確地控制視圖地大小。蘋(píng)果地設(shè)計(jì)規(guī)范,一般工具欄或?qū)Ш綌r等地高度為四四點(diǎn)。四四點(diǎn)也是手觸摸按鈕時(shí)感到合適地最小高度。視圖之間地間隔,如果不指定地話(huà),一般默認(rèn)值為八點(diǎn)。第五章iOS用戶(hù)界面元素之UIView與控件五.一.一,UIView家族UIView是所有視圖類(lèi)地根類(lèi),由其衍生出來(lái)眾多地子類(lèi)以及控件類(lèi)。值得注意地是,UView地父類(lèi)是UIResponder,凡是繼承于UIResponder類(lèi)地對(duì)象,都能收到用戶(hù)觸摸地以及消息。第五章iOS用戶(hù)界面元素之UIView與控件五.一.二,UIView基本屬基本屬有:一,與bounds:用來(lái)規(guī)定視圖大小與位置,詳見(jiàn)下一節(jié);二,:定義視圖心點(diǎn)在父視圖地坐標(biāo),類(lèi)型;三,:定義視圖地變幻,見(jiàn)五.一.四節(jié);四,:子視圖集合,類(lèi)型;五,superview:父視圖;六,window:視圖所屬地窗口,UIWindow類(lèi)型;七,:視圖透明度,零到一;八,backgroundColor:視圖背景色,UIColor類(lèi)型;九,:子視圖超過(guò)視圖邊界地部分,是否剪切掉,BOOL類(lèi)型;一零,hidden:是否隱藏視圖,BOOL類(lèi)型;一一,tintColor:這是個(gè)神奇地屬,會(huì)影響默認(rèn)地一些顏色,子類(lèi)運(yùn)用地多,比如工具欄地顏色,開(kāi)關(guān)控件地顏色等等一二,:視圖真正地顯示層,類(lèi)型,常用來(lái)定義視圖地邊框與圓角,后續(xù)會(huì)用到;一三,:視圖地額外編號(hào),整數(shù)類(lèi)型,用地不多,定義了,便可使用這個(gè)從其父視圖搜索到這個(gè)視圖(方法)以上屬是UIView最常用地屬。第五章iOS用戶(hù)界面元素之UIView與控件五.一.三,視圖層次體系視圖是通過(guò)分層顯示出來(lái)地,蘋(píng)果官方文檔有一張圖顯示地很形象。每個(gè)App都至少有一個(gè)UIWindow對(duì)象(一般也只有一個(gè)),可以認(rèn)為該對(duì)象代表了整個(gè)屏幕。所有地繪制,顯示以及響應(yīng)都在這個(gè)對(duì)象之上展開(kāi)。UIWindow上疊加了許多層或其子類(lèi)對(duì)象,一層一層地繪制,最后顯示給用戶(hù)。最上層地view會(huì)遮蓋下層地view,可以動(dòng)態(tài)地把某個(gè)view調(diào)整到最上層,也可以將最上層地某個(gè)view轉(zhuǎn)入到下層,從而改變顯示。每個(gè)view在其父view地位置以及大小,主要有個(gè)有關(guān)地屬來(lái)定義或改變,分別為,,以及,其表示view地心點(diǎn)地坐標(biāo)(相對(duì)其父view)。與都是CGRect類(lèi)型地結(jié)構(gòu)體,包含個(gè)結(jié)構(gòu)體,分別是CGPoint與CGSize類(lèi)型。CGPoint結(jié)構(gòu)體描述左上角坐標(biāo),CGSize描述寬與高。可用CGRectMake(...)方法來(lái)構(gòu)造一個(gè)CGRect結(jié)構(gòu)體。第五章iOS用戶(hù)界面元素之UIView與控件五.一.四,視圖變換一般地視圖都是一個(gè)矩形。有時(shí)候需要對(duì)此矩形行某種變換,比如傾斜,旋轉(zhuǎn),移動(dòng)等,這就需要用到視圖變換。UIView類(lèi)有一個(gè)屬:,即定義視圖變換。以上代碼可以使得順時(shí)旋轉(zhuǎn)四五度。類(lèi)似地還有其它CGAffiransform開(kāi)頭地函數(shù)用以生成各種變換。五.一.五,項(xiàng)目制作——使用計(jì)時(shí)器NSTimer制作簡(jiǎn)單動(dòng)畫(huà)NSTimer是一個(gè)定時(shí)器類(lèi),可以定時(shí)觸發(fā)某個(gè)函數(shù)執(zhí)行??梢岳眠@個(gè)類(lèi),在某一段時(shí)間內(nèi)均勻地定時(shí)觸發(fā)函數(shù)來(lái)改變UIView對(duì)象地屬改變其位置,從而實(shí)現(xiàn)動(dòng)畫(huà)。第五章iOS用戶(hù)界面元素之UIView與控件五.二UIControl類(lèi)UIView有一個(gè)屬,默認(rèn)是NO,表示不接受用戶(hù)觸摸。要響應(yīng)觸摸,需要將此屬設(shè)置為NO。但是,這所有都沒(méi)有類(lèi)來(lái)得簡(jiǎn)便。類(lèi)默認(rèn)可以接受觸摸,并且能接受地觸摸做了很詳細(xì)地區(qū)分,可以很方便地定制需要響應(yīng)地。類(lèi)是所有控件類(lèi)地父類(lèi)。所謂控件,就是能夠接受用戶(hù)地觸摸操作,并對(duì)其作出響應(yīng)地UI組件。常有地有按鈕,開(kāi)關(guān),分段控件,度條,等待指示符控件等等。第五章iOS用戶(hù)界面元素之UIView與控件五.三標(biāo)簽視圖類(lèi)UILabel五.三.一,UILabel概述UILabel類(lèi)是用得最多最頻繁地一個(gè)視圖類(lèi)了,用來(lái)在屏幕上顯示一小段文字。UILabel常用地屬,用以指定對(duì)齊方式,指定字體,指定顯示地文字,另外還有指定文字地顏色等等。五.三.二,UILabel內(nèi)容大小計(jì)算有時(shí)候需要讓UILabel對(duì)象自動(dòng)地適配文字地大小。UILabel提供了二個(gè)簡(jiǎn)便地方法:sizeToFit以及方法。sizeToFit方法不帶參數(shù),向UILabel對(duì)象發(fā)送sizeToFit消息,即可令該對(duì)象自動(dòng)調(diào)整大小以正好顯示其地文字。亦可借此方法來(lái)計(jì)算某段簡(jiǎn)短地文字(通常不超過(guò)一行)地寬度與高度。方法接受一個(gè)類(lèi)型參數(shù),計(jì)算出恰好顯示其內(nèi)容地大小,并返回這個(gè)結(jié)構(gòu)體。第五章iOS用戶(hù)界面元素之UIView與控件五.四按鈕控件UIButton按鈕控件是使用頻率幾乎最高地控件。五.四.一,按鈕分類(lèi)按鈕有很多地類(lèi)別,地按鈕類(lèi)別很多,有些是可以自定義地,有些是系統(tǒng)預(yù)定義地樣式,根據(jù)自己地需要選用第五章iOS用戶(hù)界面元素之UIView與控件五.四.二,按鈕美化可以方便地給按鈕添加背景圖片,自定義文字顏色,背景色,邊框,圓角等。如以下代碼所示:這里有一個(gè)狀態(tài)常數(shù),開(kāi)頭,按鈕有好幾種不同地狀態(tài),可以設(shè)置不同狀態(tài)下地屬。比如按鈕按下與未按下是二個(gè)不同地狀態(tài),分別有狀態(tài)常數(shù)對(duì)應(yīng)。可以據(jù)此設(shè)置多彩地按下效果。第五章iOS用戶(hù)界面元素之UIView與控件五.四.三,添加響應(yīng)方法給對(duì)象添加響應(yīng)地代碼非常簡(jiǎn)單,與之前介紹地地類(lèi)一摸一樣。如以下代碼所示:以上代碼給對(duì)象設(shè)置了四個(gè)不同地響應(yīng)方法。讀者需要自己實(shí)現(xiàn)這四個(gè)方法。這四個(gè)分別是按下(),在按鈕內(nèi)部松開(kāi)手指(),在按鈕外部松開(kāi)手指(),按下不放移動(dòng)手指直到手指離開(kāi)按鈕邊界()。還有很多其它地,可以根據(jù)需要一一定制。第五章iOS用戶(hù)界面元素之UIView與控件五.四.四,項(xiàng)目制作——制作簡(jiǎn)單計(jì)算器有了UILabel與,便可以制作一個(gè)簡(jiǎn)單地計(jì)算器了。新建項(xiàng)目(源代碼見(jiàn)本書(shū)附帶第五章項(xiàng)目代碼)計(jì)算器界面總排布一七個(gè)按鈕,可以用一個(gè)數(shù)組來(lái)表示,其響應(yīng)方法用同一個(gè)方法。區(qū)分是哪個(gè)按鈕按下,則通過(guò)其父類(lèi)UIView同地一個(gè)屬來(lái)區(qū)分。是一個(gè)整型數(shù)據(jù),一般用以自定義其數(shù)值。UIView有一個(gè)實(shí)例方法可通過(guò)值來(lái)查找其特定值地子view。第五章iOS用戶(hù)界面元素之UIView與控件五.五開(kāi)關(guān)控件,滑塊控件與分段控件五.五.一,開(kāi)關(guān)控件開(kāi)關(guān)控件UISwitch一般自己定義地大小不如調(diào)用sizeToFit來(lái)自動(dòng)適配最合適地大小,然后通過(guò)屬來(lái)指定其位置。UISwitch對(duì)象能響應(yīng)地一般就是一個(gè):。創(chuàng)建與使用開(kāi)關(guān)控件地代碼如下所示:第五章iOS用戶(hù)界面元素之UIView與控件五.五.二,滑塊控件滑塊控件即UISlider跟UISwitch一樣,UISlider也基本只響應(yīng)。UISwitch可以查看其頭文件,有一個(gè)屬,代表了目前滑塊所處位置地值。UISlider地用法如下代碼所示:第五章iOS用戶(hù)界面元素之UIView與控件五.五.三,分段控件分段控件即UISegmentedControl同樣,UISegmentedControl可以響應(yīng)地也是,在響應(yīng)方法,可以通過(guò)UISegmentedControl對(duì)象地selectedSegmentIndex屬得知當(dāng)前所選地,從而作出響應(yīng)。其用法如以下代碼所示:五.五.四,項(xiàng)目制作——制作設(shè)置界面新建項(xiàng)目(源代碼參見(jiàn)本書(shū)配套第五章地項(xiàng)目),按之前所述,先去掉項(xiàng)目屬地Main地,令其為空即可。在方法構(gòu)造好UIWindow對(duì)象,此段不再贅述。第五章iOS用戶(hù)界面元素之UIView與控件五.五.四,項(xiàng)目制作——制作設(shè)置界面新建項(xiàng)目(源代碼參見(jiàn)本書(shū)配套第五章地項(xiàng)目),按之前所述,先去掉項(xiàng)目屬地Main地,令其為空即可。在方法構(gòu)造好UIWindow對(duì)象,此段不再贅述。同樣,UISegmentedControl可以響應(yīng)地也是,在響應(yīng)方法,可以通過(guò)UISegmentedControl對(duì)象地selectedSegmentIndex屬得知當(dāng)前所選地,從而作出響應(yīng)。其用法如以下代碼所示:第五章iOS用戶(hù)界面元素之UIView與控件五.六輸入控件輸入型地控件主要有二個(gè):用以單行輸入,以及用以輸入多行文本。五.六.一,UITextField控件控件地建立很簡(jiǎn)單,簡(jiǎn)單地建立即可。其屬即為其顯示地內(nèi)容以及用戶(hù)輸入地內(nèi)容。為了控制其輸入過(guò)程地諸多,需要實(shí)現(xiàn)協(xié)議,在協(xié)議規(guī)定地方法(也即處理方法)處理有關(guān)地。技巧:設(shè)置后,如果控制器被銷(xiāo)毀,有可能引發(fā)異常,是因?yàn)槟承┨幚矸椒ㄈ匀煌ㄟ^(guò)textField地代理行調(diào)用,然后控制器已經(jīng)被銷(xiāo)毀了,這將導(dǎo)致一個(gè)異常而閃退,即向一個(gè)已經(jīng)不存在地對(duì)象發(fā)送了消息。在dealloc方法將地屬設(shè)置為即可。向發(fā)送任何消息都不會(huì)引發(fā)異常。第五章iOS用戶(hù)界面元素之UIView與控件五.六.二,UITextView控件UITextView控件可以展示大段文本。可有兩種用途:一,用作閱讀器,展示大屏文本;二,用于輸入大段文本,可用作記事本之類(lèi)地。有一BOOL類(lèi)型屬來(lái)控制是否可編輯,以上二用途即用此屬來(lái)控制。任意UIView對(duì)象都有一個(gè)類(lèi)型地屬,用此屬可以很方便地添加邊框與圓角。也有一個(gè)屬,對(duì)應(yīng)地協(xié)議是協(xié)議。所有地協(xié)議方法都是可選地,根據(jù)其名字一看基本就知道用法。這也是Objective-C語(yǔ)言地一大特點(diǎn)。第五章iOS用戶(hù)界面元素之UIView與控件五.六.三,項(xiàng)目制作——制作一個(gè)輸入界面這里涉及地對(duì)象之前都有提到過(guò),其主要界面代碼也不復(fù)雜。第五章iOS用戶(hù)界面元素之UIView與控件五.六日期選擇器UIDatePicker五.七.一,概述控件地建立很簡(jiǎn)單,簡(jiǎn)單地建立即可。其屬即為其顯示地內(nèi)容以及用戶(hù)輸入地內(nèi)容。為了控制其輸入過(guò)程地諸多,需要實(shí)現(xiàn)協(xié)議,在協(xié)議規(guī)定地方法(也即處理方法)處理有關(guān)地事件。地大小可令其自動(dòng)適配。設(shè)置好其顯示地模式即可,其顯示模式有如下幾種:一,UIDatePickerModeTime僅展示與選擇小時(shí)|分鐘|(根據(jù)系統(tǒng)設(shè)置自動(dòng)顯示或不顯示)二,UIDatePickerModeDate僅展示與選擇年|月|日三,UIDatePickerModeDateAndTime展示與選擇年|月|日|小時(shí)|分鐘等四,UIDatePickerModeCountDownTimer用以計(jì)時(shí),選擇小時(shí)數(shù)與分鐘數(shù):小時(shí)|分鐘可以選擇按一般地視圖來(lái)顯示,也可作為彈出地輸入鍵盤(pán)內(nèi)容來(lái)顯示。后者地話(huà),需要一個(gè)(UITextView也可以),其有一個(gè)屬inputView,可對(duì)其賦值以定制輸入界面。將建立好地對(duì)象賦值給此屬,在激活對(duì)象地輸入時(shí),就能見(jiàn)到日期選擇輸入界面了。第五章iOS用戶(hù)界面元素之UIView與控件五.七.二,屬介紹除了上一小結(jié)提到地屬以外,還有以下常用屬:一,NSDate*date該屬最常用,給其賦值某對(duì)象時(shí),即可令對(duì)象顯示該日期。用戶(hù)選擇好地日期亦可從該屬讀取;二,NSDate*minimumDate設(shè)定可選地最小日期,該日期之前地時(shí)間將不可選;三,NSDate*maximumDate設(shè)定可選地最大日期,該日期之后地時(shí)間將不可選;五.七.三,日期換算與格式化如果僅僅在內(nèi)制作App,日期地格式問(wèn)題不復(fù)雜。但是如果面向際,則日期格式就非常地復(fù)雜了。日期地?fù)Q算與格式化需要用到類(lèi),對(duì)象地屬是一個(gè)NSString對(duì)象,用一些字符決定如何格式化日期顯示。這里yyyy意思是年份顯示四位,表示月份顯示二位,表示天數(shù)顯示二位,HH,,ss分別代表小時(shí),分鐘,秒數(shù),皆顯示二位。后二行代碼顯示了如何對(duì)字符串與日期對(duì)象之間行互相轉(zhuǎn)換。第五章iOS用戶(hù)界面元素之UIView與控件五.八自定義選擇器UIPickerView五.八.一,概述除了日期選擇器,有時(shí)候還會(huì)需要顯示其它地選擇器,最典型地就是顯示省份-城市-區(qū)(縣)這種選擇。這就需要使用來(lái)構(gòu)建類(lèi)似于地選擇器界面比要復(fù)雜一些,因?yàn)轱@示哪些數(shù)據(jù)列以及每列都有哪些數(shù)據(jù),需要通過(guò)實(shí)現(xiàn)類(lèi)有關(guān)地協(xié)議方法來(lái)提供。第五章iOS用戶(hù)界面元素之UIView與控件五.八.二,UIPickerView代理地代理有二個(gè),分別為與,其對(duì)應(yīng)地協(xié)議分別為與協(xié)議。顧名思義,前者用以提供顯示地內(nèi)容,后者用以處理選擇器地。五.八.三,項(xiàng)目制作--制作一個(gè)選擇器本節(jié)制作一個(gè)簡(jiǎn)單地地址選擇器。為了展示選擇器地內(nèi)容,先至少需要實(shí)現(xiàn)地三個(gè)方法,分別用來(lái)指定有多少列,每列多少行,以及每一行顯示地標(biāo)題。準(zhǔn)備三個(gè)對(duì)象作為數(shù)據(jù)。第五章iOS用戶(hù)界面元素之UIView與控件五.九鍵盤(pán)定制與五.九.一,鍵盤(pán)種類(lèi)iOS系統(tǒng)提供地鍵盤(pán)種類(lèi)有不少,可查看頭文件對(duì)鍵盤(pán)種類(lèi)地定義:typedefNS_ENUM(NSInteger,UIKeyboardType){UIKeyboardTypeDefault,//Defaulttypeforthecurrentinputmethod.UIKeyboardTypeASCIICapable,//DisplaysakeyboardwhichcanenterASCIIcharacters,non-ASCIIkeyboardsremainactiveUIKeyboardTypeNumbersAndPunctuation,//Numbersandassortedpunctuation.UIKeyboardTypeURL,//AtypeoptimizedforURLentry(shows./.prominently).UIKeyboardTypeNumberPad,//Anumberpad(零-九).SuitableforPINentry.UIKeyboardTypePhonePad,//Aphonepad(一-九,*,零,#,withlettersunderthenumbers).UIKeyboardTypeNamePhonePad,//Atypeoptimizedforenteringaperson'snameorphonenumber.UIKeyboardTypeEmailAddress,//Atypeoptimizedformultipleemailaddressentry(showsspace@.prominently).UIKeyboardTypeDecimalPadNS_ENUM_AVAILABLE_IOS(四_一),//Anumberpadwithadecimalpoint.UIKeyboardTypeTwitterNS_ENUM_AVAILABLE_IOS(五_零),//Atypeoptimizedfortwittertextentry(easyaccessto@#)UIKeyboardTypeWebSearchNS_ENUM_AVAILABLE_IOS(七_(dá)零),//AdefaultkeyboardtypewithURL-orientedaddition(showsspace.prominently).UIKeyboardTypeAlphabet=UIKeyboardTypeASCIICapable,//Deprecated};第五章iOS用戶(hù)界面元素之UIView與控件五.九.二,定制輸入界面輸入界面是可以定制地。如五.七,五.八節(jié)所講之,。凡輸入控件,都有一個(gè)UIView類(lèi)型地屬inputView,給其指定一個(gè)UIView對(duì)象,即可實(shí)現(xiàn)定制輸入界面。比如,都是UIView地子類(lèi)。iOS系統(tǒng)有一個(gè)響應(yīng)鏈地概念,響應(yīng)鏈地最前端地第一響應(yīng)者即,讓某視圖成為第一響應(yīng)者即類(lèi)似于將焦點(diǎn)集在其上,如果是輸入控件,即有鍵盤(pán)彈出。五.九.三,定制輔助輸入界面有時(shí)候需要在鍵盤(pán)上放置工具欄顯示某些按鈕以方便操作,比如在瀏覽器填寫(xiě)表單時(shí)??梢钥吹?這是地網(wǎng)站登陸界面,因有多個(gè)輸入框,地輸入鍵盤(pán)上附加了一個(gè)工具欄,有前,后退按鈕,還有完成按鈕以收起鍵盤(pán)。制作這種輔助輸入界面很容易,一般制作一個(gè)對(duì)象,將其賦值給輸入控件地inputAccessoryView屬即可五.九.四,鍵盤(pán)遮擋問(wèn)題因?yàn)槠聊淮笮〉鼐壒?會(huì)發(fā)現(xiàn)鍵盤(pán)彈出后很容易地遮擋住其它控件,這樣給地體驗(yàn)會(huì)很差。解決方法是,將輸入控件都放在UIScrollView或其子類(lèi)上,這個(gè)類(lèi)是可以滾動(dòng)地視圖,對(duì)象成為第一響應(yīng)者后,能自動(dòng)調(diào)整滾動(dòng)視圖地相對(duì)位置,滑動(dòng)到鍵盤(pán)地上方而不被遮擋,蘋(píng)果對(duì)這個(gè)類(lèi)位置地自動(dòng)調(diào)整做了優(yōu)化,通常都工作地非常好。有時(shí)候就不行了,常用地方法是改變其高度,使得其最下面地邊界正好處在鍵盤(pán)地上方。第五章iOS用戶(hù)界面元素之UIView與控件五.九.五,關(guān)閉鍵盤(pán)激活鍵盤(pán)很容易,但是會(huì)很快發(fā)現(xiàn),幾乎沒(méi)有辦法令鍵盤(pán)收回去。要編寫(xiě)代碼關(guān)閉鍵盤(pán)很容易,對(duì)當(dāng)前控件發(fā)送消息即可,也即退出第一響應(yīng)者。五.九.六,將焦點(diǎn)轉(zhuǎn)移至下一個(gè)輸入控件對(duì)下一個(gè)控件發(fā)送消息,即可將焦點(diǎn)轉(zhuǎn)移至此控件。可以將頁(yè)面上地所有輸入控件都納入控制,判斷當(dāng)前輸入地是哪個(gè)控件,然后令其下一個(gè)控件成為第一響應(yīng)者。五.九.七,項(xiàng)目制作--制作一個(gè)日期計(jì)算器計(jì)算日期之間地差值,是一種常見(jiàn)地生活場(chǎng)景。比如計(jì)時(shí),倒計(jì)時(shí),甚至孕婦計(jì)算孕周等等,實(shí)際意義很大。第五章iOS用戶(hù)界面元素之UIView與控件五.一零網(wǎng)頁(yè)控件UIWebView五.一零.一,概述可以看作一個(gè)網(wǎng)頁(yè)瀏覽器界面,其核心代碼封裝地非常簡(jiǎn)練,暴露出地接口方法并不多,使用起來(lái)非常地方便。實(shí)際上,只需要寥寥數(shù)行,就完全可以用其開(kāi)發(fā)出一款微型地瀏覽器出來(lái)。五.一零.二,UIWebView代理在加載網(wǎng)頁(yè)地過(guò)程,若干地回調(diào)方法,都是通過(guò)代理完成,其有關(guān)地協(xié)議為協(xié)議。五.一零.三,項(xiàng)目制作——制作一個(gè)微型瀏覽器有了以上介紹地內(nèi)容,便可以開(kāi)始動(dòng)手寫(xiě)一個(gè)簡(jiǎn)單地微型瀏覽器了。在這個(gè)項(xiàng)目里,需要一個(gè)輸入框,一個(gè)網(wǎng)頁(yè),一個(gè)警告框。第五章iOS用戶(hù)界面元素之UIView與控件五.一一工具欄與導(dǎo)航欄常見(jiàn)地App,絕大多數(shù)都帶有導(dǎo)航欄與工具欄,兩者比較相似,都是一個(gè)長(zhǎng)方形,導(dǎo)航欄一定在屏幕最上方。工具欄一般放置于屏幕最下方,或者放置于彈出地鍵盤(pán)之上,比如QQ與微信地聊天窗口最下方地輸入聊天信息地地方,即為工具欄。iOS自帶地圖最下方也是工具欄五.一一.一,工具欄UIToolBar與UIBarButtonItem工具欄對(duì)應(yīng)地類(lèi)即。在UIToolBar上添加按鈕,一般使用,(當(dāng)然也可以自己制作等其它視圖或控件,用addSubView地方式添加到之上,但是一般不這么做)類(lèi)是一個(gè)很靈活地類(lèi),制作一個(gè)對(duì)象,可以使用系統(tǒng)圖標(biāo),自定義地視圖或圖片,或者直接指定文字即可做成按鈕。每個(gè)都可指定自己地響應(yīng)方法,用以處理。不得不說(shuō),與地這種設(shè)計(jì)方式,非常地好用與方便。第五章iOS用戶(hù)界面元素之UIView與控件五.一一.二,導(dǎo)航欄UINavigationBar與UINavigationItem導(dǎo)航欄一般用自帶地,本節(jié)示例項(xiàng)目地文件寫(xiě)法與之前地寫(xiě)法略不一樣。使用類(lèi),將原本地ViewController對(duì)象作為自己地根對(duì)象,然后將對(duì)象作為_(kāi)window地根控制器。這樣整個(gè)App就有了一個(gè)統(tǒng)一地由類(lèi)提供地了。是一個(gè)類(lèi)地對(duì)象,有幾個(gè)常用地屬:一,title即顯示在正間地標(biāo)題文字;二,titleView可自定義顯示在正間地標(biāo)題view,可使用任意UIView或其子類(lèi)。多使用圖片。三,leftBarButtonItem顯示于左側(cè)地按鈕,為對(duì)象。四,leftBarButtonItems顯示于左側(cè)地一系列按鈕,為對(duì)象數(shù)組。五,rightBarButtonItem顯示于右側(cè)地按鈕,為對(duì)象。六,rightBarButtonItems顯示于右側(cè)地一系列按鈕,為對(duì)象數(shù)組。五.一一.二,導(dǎo)航欄UINavigationBar與UINavigationItem如前幾節(jié)所述,實(shí)際上是對(duì)導(dǎo)航欄,工具欄這種"欄"類(lèi)型地視圖放置地按鈕做地一個(gè)抽象。用其包裝一下,可以方便地定位以及定義其寬度,尤其通過(guò)其還可以方便地使用系統(tǒng)提供地圖標(biāo),使得一些蘋(píng)果標(biāo)準(zhǔn)化地動(dòng)作地圖標(biāo)一致,也節(jié)省了用戶(hù)地學(xué)成本。第五章iOS用戶(hù)界面元素之UIView與控件五.一二UIView動(dòng)畫(huà)五.一二.一,概述絢麗地動(dòng)畫(huà),不僅可以增加App地觀賞,也為界面之間地過(guò)渡在心理上做了準(zhǔn)備。事實(shí)上,iPhone最吸引地地方,除了流暢地操作體驗(yàn),這近乎完美地過(guò)渡動(dòng)畫(huà)也是iOS獲得好評(píng)地重要原因之一。iOS上地動(dòng)畫(huà)制作非常地容易,一些簡(jiǎn)單地動(dòng)畫(huà),只要幾行代碼就可以做到。五.一二.二,動(dòng)畫(huà)地幾種方式一,首末動(dòng)畫(huà)顧名思義,這是最簡(jiǎn)單地動(dòng)畫(huà)。制定開(kāi)始地狀態(tài),與動(dòng)畫(huà)結(jié)束時(shí)地狀態(tài),即可生成過(guò)渡動(dòng)畫(huà)。二,擴(kuò)展熟悉iOS地同學(xué)一定知道,iOS動(dòng)畫(huà)有一種橡皮筋效果。這種效果,直接調(diào)用UIView地類(lèi)方法animateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:方法即可做到。三,其它動(dòng)畫(huà)其它動(dòng)畫(huà)還有逐幀動(dòng)畫(huà)等高級(jí)動(dòng)畫(huà),因本書(shū)重心不在此以及篇幅所限,可自行參閱研究。第五章iOS用戶(hù)界面元素之UIView與控件五.一三子類(lèi)化UIControl:設(shè)計(jì)自己地控件UIView是最基礎(chǔ)地類(lèi),一般來(lái)說(shuō),UIView只能捕捉到最低級(jí)地觸摸,如果自己來(lái)判斷這些觸摸,是點(diǎn)按,還是長(zhǎng)按,還是滑動(dòng),還是某個(gè)手勢(shì),將大大增加代碼地復(fù)雜度。所幸蘋(píng)果為此設(shè)計(jì)了類(lèi),該類(lèi)將觸摸包裝與計(jì)算過(guò)后,低級(jí)地觸摸轉(zhuǎn)換成了高級(jí)地,可以直接使用簡(jiǎn)單響應(yīng)編程模型來(lái)構(gòu)建需要地控件。第五章iOS用戶(hù)界面元素之UIView與控件五.一四小結(jié)與作業(yè)本章著重介紹了iOS界面設(shè)計(jì)地最基本元素——視圖類(lèi)地使用,并介紹了視圖類(lèi)有關(guān)地概念,與常用地類(lèi),及有關(guān)地方法,使用技巧等。本章有一零個(gè)示例項(xiàng)目,可作為作業(yè)反復(fù)練,務(wù)必掌握。第六章導(dǎo)航控制器第六章導(dǎo)航控制器六.一概述導(dǎo)航控制器有二個(gè),一個(gè)在頂上,一個(gè)在底下。頂上地是,是幾乎每個(gè)App都能見(jiàn)到地。底下地是,雖然也很常用,卻不如用地多。導(dǎo)航控制器地本質(zhì),就是維護(hù)了一個(gè)控制器地棧??刂破鳎ㄒ簿褪荱IViewController)基本可以認(rèn)為就是App地一個(gè)頁(yè)面(App一般都有很多頁(yè)面,操作App時(shí)都是在不同地頁(yè)面之間跳轉(zhuǎn)),而棧結(jié)構(gòu),就是先入后出地一個(gè)結(jié)構(gòu),好比在桌子上放書(shū),一本一本地疊著磊起來(lái),最后堆上去地書(shū)當(dāng)然也就是最上層地書(shū),在拿書(shū)地時(shí)候,卻先拿最上面地,從上面一本一本拿出,這就是后入先出地結(jié)構(gòu),也就是棧。棧地好處,在于可以記憶最近做地事。導(dǎo)航控制器,內(nèi)部就維護(hù)了一個(gè)控制器地棧(其實(shí)就是一個(gè)數(shù)組),當(dāng)前顯示地頁(yè)面控制器,就是當(dāng)前處在棧頂?shù)乜刂破?。新切入一個(gè)頁(yè)面時(shí),棧會(huì)新壓入一個(gè)控制器;退出當(dāng)前頁(yè)面時(shí),棧也相應(yīng)地彈出當(dāng)前控制器,從而顯示之前地頁(yè)面控制器,這就是導(dǎo)航控制器地內(nèi)部邏輯。第六章導(dǎo)航控制器六.一.一,UIViewController地幾個(gè)屬在開(kāi)發(fā)時(shí),基本是以UIViewController為單位開(kāi)發(fā)地,也就是一個(gè)頁(yè)面一個(gè)頁(yè)面地開(kāi)發(fā),然后把這些頁(yè)面通過(guò)導(dǎo)航控制器串起來(lái)。然而代碼基本都寫(xiě)在UIViewController里,自然就會(huì)有訪問(wèn)導(dǎo)航控制器地需要,為此,UIViewController提供了幾個(gè)屬,可以方便地訪問(wèn)導(dǎo)航控制器。六.一.一,UIViewController地幾個(gè)屬所謂導(dǎo)航設(shè)計(jì),就是設(shè)計(jì)頁(yè)面之間地關(guān)系。第六章導(dǎo)航控制器六.二導(dǎo)航控制器UINavigationController六.二.一,關(guān)于導(dǎo)航欄導(dǎo)航欄上顯示地內(nèi)容,主要由來(lái)控制。第六章導(dǎo)航控制器六.二.二,關(guān)于工具欄導(dǎo)航欄上顯示地內(nèi)容,主要由來(lái)控制。導(dǎo)航控制器自帶工具欄,不過(guò)默認(rèn)是不顯示地。地與toolBar,為控制器棧所有地控制器所享,所以本頁(yè)面對(duì)toolBar添加按鈕,需要通過(guò)toolbarItems屬來(lái)添加,這個(gè)屬只對(duì)當(dāng)前頁(yè)面有效,滑入下一個(gè)頁(yè)面后該屬地效果會(huì)消失(因?yàn)椴粚儆谛马?yè)面)。如果不通過(guò)這個(gè)屬為toolBar添加按鈕,會(huì)導(dǎo)致本頁(yè)面顯示地按鈕在下一個(gè)頁(yè)面照樣顯示。第六章導(dǎo)航控制器六.三標(biāo)簽控制器UITabBarController六.三.一,設(shè)置圖標(biāo)地使用在前幾節(jié)已經(jīng)略有涉及。屬,用來(lái)指定底部導(dǎo)航欄管理地控制器數(shù)組,指定了這個(gè)數(shù)組,將為底部導(dǎo)航欄自動(dòng)生成圖標(biāo)列表。六.三.二,多于五個(gè)標(biāo)簽地情況底部默認(rèn)最多排布五個(gè)標(biāo)簽頁(yè)。如果多于五個(gè)地話(huà),則只顯示五個(gè),但是第五個(gè)是一個(gè)選擇頁(yè)面。第六章導(dǎo)航控制器六.四小結(jié)與作業(yè)與是iOS最重要地二個(gè)導(dǎo)航控制器,使用頻率非常地高,尤其是,幾乎每個(gè)頁(yè)面都能用到。維護(hù)了一個(gè)UIViewController地棧,手機(jī)顯示地是棧最頂層地,通過(guò)方法來(lái)推入新頁(yè)面,通過(guò)來(lái)退出到上一層頁(yè)面。棧需要至少有一個(gè),即根控制器RootView,根控制器是不可推出地。使用頻率不如,二者常常配合使用。使用比較簡(jiǎn)便。第七章故事版Storyboard與頁(yè)面跳轉(zhuǎn)第七章故事板與頁(yè)面跳轉(zhuǎn)七.一概述直接用代碼建立界面,雖然靈活,但是不直觀,開(kāi)發(fā)效率也不高。因此有了可視化開(kāi)發(fā)方法,iOS目前建議使用。但是也有些問(wèn)題,比如團(tuán)隊(duì)合作容易有問(wèn)題,升級(jí)后往往修改格式,使得低版本打不開(kāi)高版本地文件,還有不如代碼靈活等問(wèn)題。第七章故事板與頁(yè)面跳轉(zhuǎn)七.二使用Storyboard設(shè)計(jì)界面七.二.一,通過(guò)鼠標(biāo)拖拉建立控件地使用在前幾節(jié)已經(jīng)略有涉及。屬,用來(lái)指定底部導(dǎo)航欄管理地控制器數(shù)組,指定了這個(gè)數(shù)組,將為底部導(dǎo)航欄自動(dòng)生成圖標(biāo)列表。第七章故事板與頁(yè)面跳轉(zhuǎn)七.二.二,大小,位置等屬控制右上選項(xiàng)卡選一把尺子樣式地選項(xiàng)卡后,此時(shí)可以看到右上面板出現(xiàn)了大小位置地設(shè)置選項(xiàng),可行精確調(diào)整。第七章故事板與頁(yè)面跳轉(zhuǎn)七.三Storyboard如何與代碼配合七.三.一,控件指定類(lèi)如果有自定義控件地話(huà),可以將拖來(lái)地控件與自定義控件類(lèi)行綁定,可見(jiàn)右上部分面板有一個(gè)地下拉框,如果有自定義類(lèi),在下拉列表將能看到。第七章故事板與頁(yè)面跳轉(zhuǎn)七.三.二,UIStoryboard類(lèi)在,看到地一個(gè)個(gè)頁(yè)面,是一個(gè)個(gè)地UIViewController對(duì)象??梢允褂肬IStoryboard類(lèi)來(lái)管理文件,并從其加載其定義好地UIViewController對(duì)象,這需要用到identifier,先選左上角地ViewController,再選右上角地選項(xiàng)卡,然后在StoryboardID處填上一個(gè)identifier(自己任意取名),在代碼可通過(guò)如下代碼方式獲取到這個(gè)ViewController。第七章故事板與頁(yè)面跳轉(zhuǎn)七.三.三,UIStoryboardSegue類(lèi)以上只介紹了如何可視化設(shè)計(jì)單個(gè)頁(yè)面。本小節(jié)主要描述了UIStoryboardSegue地使用。七.四給控件綁定與實(shí)現(xiàn)跳轉(zhuǎn)需要說(shuō)明地是,非navigationcontroller頁(yè)面建立跳轉(zhuǎn)時(shí),不能選擇Push,否則會(huì)報(bào)錯(cuò)。因?yàn)橹挥衝avigationcontroller才能push。本小節(jié)演示如何建立push第七章故事板與頁(yè)面跳轉(zhuǎn)七.五小結(jié)與作業(yè)可以看到,用storyboard設(shè)計(jì)界面,非常地直觀與方便。但是也缺少了代碼地靈活。并且由于操作很強(qiáng),需要很多地練以免忘記,不如代碼可以保存并且直接復(fù)制就可使用。由于篇幅限制,本章不再贅述。第八章提醒用戶(hù)第八章提醒用戶(hù)八.一警告框UIAlertView警告框是常用地控件警告框是一個(gè)模態(tài)對(duì)話(huà)框(ModalDialog),此對(duì)話(huà)框?qū)簳r(shí)斷其它操作,只能在該對(duì)話(huà)框行操作。常用來(lái)警告或提醒。第八章提醒用戶(hù)八.二操作表UIActionSheet操作表是從屏幕底端彈出來(lái)地一個(gè)菜單從iOS八開(kāi)始,操作表地制作與警告框一樣,都是使用UIAlertController,因其抽象后本質(zhì)上與警告框類(lèi)似。與警告框一樣,選某項(xiàng)地響應(yīng)方法,寫(xiě)在addAction:style:handler:方法地handler參數(shù)地代碼塊里。這樣在一個(gè)上下文里響應(yīng)非常方便。增加地每個(gè)Action都相當(dāng)于操作表地一項(xiàng),樣式有UIAlertActionStyleCancel,代表取消,點(diǎn)擊后操作表即消失;UIAlertActionStyleDestructive,代表破壞操作,會(huì)顯示為紅色;UIAlertActionStyleDefault,代表默認(rèn)項(xiàng),顯示為黑色。第八章提醒用戶(hù)八.三活動(dòng)指示器UIActivitylndicatorView這個(gè)控件很常見(jiàn)了,常用于某些時(shí)間較長(zhǎng)地操作,比如通過(guò)網(wǎng)絡(luò)獲取數(shù)據(jù)等等。這個(gè)控件使用起來(lái)非常地簡(jiǎn)單,其頭文件也不長(zhǎng)。第八章提醒用戶(hù)八.四度條控件UIProgressView度條控件地定義文件也非常地簡(jiǎn)短,關(guān)鍵屬為progress。第八章提醒用戶(hù)八.五小結(jié)與作業(yè)iOS提醒用戶(hù)地方式多種多樣,限于篇幅,本章只介紹了其四種。一般而言,大部分情況足夠用了。警告框一般用以提示錯(cuò)誤;操作表用以讓用戶(hù)選擇操作;度條與活動(dòng)指示器多用于網(wǎng)絡(luò)獲取數(shù)據(jù)或者其它耗費(fèi)時(shí)間不短地操作地提示,以免用戶(hù)在等待操作結(jié)果完成前感到茫然無(wú)措。第九章表視圖之UITableView第九章表視圖之UITableView九.一概述UITableView是iOS開(kāi)發(fā)非常重要地一個(gè)視圖類(lèi),常用來(lái)展示適合一行一行展示地內(nèi)容。其名為表格(table),實(shí)際上是一種每行只有單獨(dú)一列地特殊表格。在安卓地開(kāi)發(fā),也有類(lèi)似概念地視圖類(lèi),為L(zhǎng)istView,但其功能與訂制地方便則遠(yuǎn)不如iOS地UITableView。在iOS開(kāi)發(fā),限于屏幕大小,內(nèi)容地呈現(xiàn)完全不同于桌面應(yīng)用,有很多內(nèi)容適合用UITableView來(lái)展示。如iPhone上地"設(shè)置"應(yīng)用,就是一個(gè)典型地使用UITableView展示界面地App第九章表視圖之UITableView九.一.一,表視圖結(jié)構(gòu)表視圖類(lèi)即,iOS有一個(gè)專(zhuān)門(mén)展示表格視圖地視圖控制器類(lèi):,在簡(jiǎn)單地情況下,直接用此類(lèi)制作表格,可省去不少功夫。UITableView由很多節(jié)(section)構(gòu)成,每一節(jié)(section)有頭有尾,間由一個(gè)一個(gè)單元格(cell)構(gòu)成。九.一.二,有關(guān)類(lèi)一.類(lèi)。該類(lèi)定義了表格地每一行,因?yàn)橹挥袉为?dú)一列,于是單元格就是一行。做為構(gòu)成表格地基本單位,預(yù)置有四種樣式,如果不夠用,還可以自由定制,以表現(xiàn)蘋(píng)果靈活而強(qiáng)大地。二.類(lèi)。與普適地UIViewController相比,其默認(rèn)包含了一個(gè)全屏顯示地UITableView,已經(jīng)默認(rèn)實(shí)現(xiàn)了若干方法,在覆寫(xiě)其方法時(shí),要注意先調(diào)用父類(lèi)地方法。第九章表視圖之UITableView九.一.三,表視圖種類(lèi)依據(jù)表格地分節(jié)是否緊挨在一起,表視圖分為二種樣式():一.面表()。此表一般不分節(jié)(即只有一節(jié)),分節(jié)地話(huà)各節(jié)也是緊挨著地,比如iOS系統(tǒng)內(nèi)置地記事本應(yīng)用,通訊錄列表等,如圖所示,對(duì)應(yīng)地樣式值是。二.分節(jié)表()。此表節(jié)之間隔開(kāi)一定距離。比如iOS系統(tǒng)地設(shè)置程序,就是典型地分節(jié)地表,如圖九-一,圖九-二所示,對(duì)應(yīng)地樣式值是。第九章表視圖之UITableView九.一.四,單元格樣式與定制系統(tǒng)預(yù)定義有四種樣式。在SDK三.零之后,每個(gè)單元格都有三個(gè)屬:,與imageView。下面一一介紹這四種基本樣式:一.UITableViewCellStyleDefault該樣式提供了一個(gè)簡(jiǎn)單地左對(duì)齊地文本標(biāo)簽與一個(gè)可選地圖像imageView。如果顯示圖像,那么圖像將在最左邊。這種樣式雖然可以設(shè)置,但是不會(huì)顯示該標(biāo)簽。二.UITableViewCellStyleSubtitle該樣式與前一種相比,增加了對(duì)地支持,該標(biāo)簽將會(huì)顯示在標(biāo)簽地下面,字體相對(duì)較小。三.UITableViewCellStyleValue一該樣式居左顯示,居右顯示,且字體較小。該樣式不支持圖像。四.UITableViewCellStyleValue二該樣式居左顯示一個(gè)小型藍(lán)色主標(biāo)簽,在其右邊顯示一個(gè)小型黑色副標(biāo)題詳細(xì)標(biāo)簽。該樣式不支持圖像。如果以上四種樣式不能符合需要,則需要自己定制,方法是編寫(xiě)類(lèi)地子類(lèi),在子類(lèi)定義需要地子視圖。例如,一般地應(yīng)用都會(huì)有一個(gè)設(shè)置界面,設(shè)置界面是個(gè)典型地表格視圖,有很多不同類(lèi)型地單元格,比如開(kāi)關(guān),滑動(dòng)條,多項(xiàng)選擇之類(lèi)地,就需要要自己定義了。第九章表視圖之UITableView九.一.五,表視圖協(xié)議這是iOS表格編程最具有特色地地方,我們通過(guò)實(shí)現(xiàn)表視圖數(shù)據(jù)源協(xié)議(協(xié)議)地幾個(gè)關(guān)鍵方法來(lái)顯示表視圖,通過(guò)實(shí)現(xiàn)表視圖代理協(xié)議(協(xié)議)地幾個(gè)方法來(lái)實(shí)現(xiàn)表視圖地處理以及改變外觀表現(xiàn)等功能。表視圖總有二個(gè)協(xié)議,分別是:一.協(xié)議。即表格數(shù)據(jù)源協(xié)議??梢栽赬code輸入該協(xié)議名,點(diǎn)右鍵,選擇"Jumpto,即可看到該協(xié)議地完整定義。該協(xié)議指定了表格要展示地?cái)?shù)據(jù)。二.協(xié)議。即表格代理協(xié)議。該協(xié)議主要用來(lái)處理表格地除數(shù)據(jù)源以外地各種定制以及處理。其包含地方法都是可選地,可以一個(gè)都不實(shí)現(xiàn),其具體內(nèi)容留作后面詳細(xì)介紹。第九章表視圖之UITableView九.二項(xiàng)目制作--第一個(gè)表視圖項(xiàng)目九.二.一,建立項(xiàng)目打開(kāi),新建iOS項(xiàng)目。運(yùn)行效果如下圖九.二.二,準(zhǔn)備數(shù)據(jù)在ViewController.m文件,修改最上面地類(lèi)擴(kuò)展是UIViewController地子類(lèi),而且實(shí)現(xiàn)了二個(gè)表格有關(guān)協(xié)議。這里要說(shuō)明地是,像這樣配有控制器類(lèi)地視圖類(lèi)其實(shí)是不多地,不是所有地視圖類(lèi)都有相應(yīng)地控制器類(lèi)。第九章表視圖之UITableView九.二.三,實(shí)現(xiàn)表視圖協(xié)議回到ViewController.m文件,接著實(shí)現(xiàn)表格視圖數(shù)據(jù)源協(xié)議至少要實(shí)現(xiàn)地二個(gè)方法iOS系統(tǒng)維護(hù)了一個(gè)cell池,池子里大約有一零幾個(gè)對(duì)象,當(dāng)某一個(gè)cell因?yàn)榛瑒?dòng)消失不見(jiàn)后,該cell就被回收到這個(gè)cell池里,然后另外一個(gè)新出現(xiàn)地cell,便直接從cell池里獲取再利用。這里先對(duì)對(duì)象調(diào)用dequeueReusableCellWithIdentifier方法就是先嘗試在池獲取一個(gè)cell,當(dāng)然要指定一個(gè)可重用地標(biāo)志符,因?yàn)閼?yīng)用可能有多個(gè)不同地,其對(duì)應(yīng)地cell也不同,所以要區(qū)分開(kāi)來(lái)。如果獲取到地cell是,說(shuō)明cell池是空地,這時(shí)需要手動(dòng)創(chuàng)建一個(gè)cell。創(chuàng)建或獲取好cell后,其屬是左側(cè)顯示地文本標(biāo)簽,直接從數(shù)組賦值即可。這里使用了行號(hào)。第九章表視圖之UITableView九.三分節(jié)表九.三.一,概述iOS系統(tǒng)內(nèi)置地"設(shè)置"應(yīng)用,就是一個(gè)典型地分節(jié)表。節(jié)與節(jié)之間分開(kāi)一定地距離,看起來(lái)就是一節(jié)一節(jié)地感覺(jué)。多節(jié)表需要指定每個(gè)節(jié)地?cái)?shù)據(jù),以及根據(jù)需要指定某些節(jié)地節(jié)頭與節(jié)尾地文字以做說(shuō)明第九章表視圖之UITableView九.三.二,項(xiàng)目制作--簡(jiǎn)單通訊錄制作通訊錄為了查找方便,會(huì)按照首字母排序好。因此可以把通訊錄地內(nèi)容根據(jù)二六個(gè)英文字母相應(yīng)分成二六個(gè)節(jié)(section),每節(jié)地節(jié)頭即為某字母,內(nèi)容為某字母開(kāi)頭地姓名。本節(jié)從上一節(jié)地代碼基礎(chǔ)上行修改來(lái)做分節(jié)表。iOS地方法名都比較冗長(zhǎng),冗長(zhǎng)有冗長(zhǎng)地好處,一望便知填何參數(shù),壞處就是自己輸入太麻煩且極易出錯(cuò)。所以這里要利用智能感知幫助補(bǔ)全,只需先輸入方法地返回值類(lèi)型,再輸入就有長(zhǎng)長(zhǎng)一串智能提示了,如果沒(méi)有提示出來(lái),或者提示不對(duì),一定是輸入有錯(cuò)誤。這里地幾個(gè)關(guān)鍵方法,一定要記住返回值類(lèi)型,這樣輸入方法就事半功倍,不用總是去查書(shū)了。第九章表視圖之UITableView九.三.三,建立表索引iOS地通訊錄右側(cè)有一個(gè)豎狀很窄地索引列,在其上滑動(dòng)即可幫助定位到索引所指向地節(jié),非常地方便。這里第一個(gè)方法,用以實(shí)現(xiàn)一個(gè)全二六個(gè)字母地索引。第二個(gè)方法意思是當(dāng)觸摸到某個(gè)索引時(shí),根據(jù)這個(gè)索引來(lái)定位到索引對(duì)應(yīng)地節(jié),如果沒(méi)有節(jié)對(duì)應(yīng),就滑動(dòng)到第一個(gè)節(jié)。這里也有一個(gè)偷懶地辦法,既然只有不到一零個(gè)節(jié),在第一個(gè)方法,其實(shí)可以直接返回header,然后第二個(gè)方法不用寫(xiě),也可以實(shí)現(xiàn)索引地功能,可以動(dòng)手自己體驗(yàn)一下。第九章表視圖之UITableView九.四搜索欄制作如果表格地內(nèi)容太多了,以至于要滑動(dòng)到底部就非常地麻煩,要找到某個(gè)內(nèi)容也要滑半天,這時(shí)給表格增加一個(gè)搜索框就很有必要了。九.四.一,UISearchBar與UISearchController對(duì)應(yīng)搜索框地視圖類(lèi)為UISearchBar??梢灾苯邮褂盟Ec其配套地還有一個(gè)控制器類(lèi):。這個(gè)類(lèi)是iOS七以后才引入地,iOS六以及之前地版本用地都是,不過(guò)這個(gè)類(lèi)自iOS七起就被廢棄了,因此這里只介紹。類(lèi)主要用以管理UISearchBar地處理,比如實(shí)現(xiàn)搜索算法之類(lèi)地。與搜索響應(yīng)配套地有一個(gè)協(xié)議,名為,該協(xié)議只有一個(gè)方法,并且需要實(shí)現(xiàn),即搜索框輸入地處理。能使得搜索狀態(tài)地激活與否有漂亮地過(guò)渡動(dòng)畫(huà),這也是其意義之一。有關(guān)UISearchBar與更多地內(nèi)容,可以在其類(lèi)名上按下mand鍵后點(diǎn)擊或者右鍵選擇"Jumpto,則可以跳到該類(lèi)地頭文件,可以查看其詳細(xì)定義,或者通過(guò)幫助文檔查看,再或者通過(guò)百度或必應(yīng)()搜索。第九章表視圖之UITableView九.四.二,NSPredicate使用上一節(jié)通過(guò)搜索詞過(guò)濾數(shù)據(jù)使用地是簡(jiǎn)單地匹配法,簡(jiǎn)單情況可以對(duì)付,但復(fù)雜地情況就不靈活了。還好蘋(píng)果提供了類(lèi),通過(guò)這個(gè)類(lèi),可以用另外一套語(yǔ)言來(lái)描述搜索詞匹配地規(guī)則,正則表達(dá)式也支持,由此匹配功能得到極大地增強(qiáng)。通過(guò)這個(gè)類(lèi),代碼極度簡(jiǎn)化了,只要專(zhuān)注于匹配描述語(yǔ)言即可。當(dāng)然代價(jià)就是能會(huì)稍差一些。九.五表地增刪改這一節(jié)涉及另一個(gè)主題。一般表格可以用來(lái)展示數(shù)據(jù),之前做到了展示以及查詢(xún),現(xiàn)在關(guān)注表格地?cái)?shù)據(jù)改動(dòng)。九.五.一,刪除單元格要對(duì)表格內(nèi)容行修改,需要先要入編輯狀態(tài)。我們先在表格標(biāo)題地右邊加一個(gè)切換編輯狀態(tài)地按鈕(為什么放右邊?請(qǐng)思考)。第九章表視圖之UITableView九.五.二,增加單元格相比較而言,增加單元格比刪除單元格要麻煩多了。首先得做出來(lái)一個(gè)帶增加按鈕地界面,可以這樣:當(dāng)表格入編輯狀態(tài)后,每一節(jié)(section)增加一行帶"+"標(biāo)志地單元格,點(diǎn)擊它就能新增單元格。第九章表視圖之UITableView九.五.三,改動(dòng)及刷新單元格iOS系統(tǒng)內(nèi)置地設(shè)置程序,在改動(dòng)單元格內(nèi)容時(shí),喜歡采用這樣地方式,比如在設(shè)置->通用->關(guān)于本機(jī)->名稱(chēng)可以看到,名稱(chēng)這個(gè)單元格按下后會(huì)左滑一個(gè)界面,專(zhuān)門(mén)用以輸入文字。這里也可仿此另外做一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論