




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