![基于Xcode4開發(fā)的兩個iPhone程序_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-9/15/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce7/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce71.gif)
![基于Xcode4開發(fā)的兩個iPhone程序_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-9/15/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce7/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce72.gif)
![基于Xcode4開發(fā)的兩個iPhone程序_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-9/15/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce7/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce73.gif)
![基于Xcode4開發(fā)的兩個iPhone程序_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-9/15/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce7/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce74.gif)
![基于Xcode4開發(fā)的兩個iPhone程序_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-9/15/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce7/2cb1bf9c-d78c-47ed-b8c8-d4fa5f044ce75.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于Xcode4開發(fā)第一個iPhone程序:“Hello World”項目要求寫一個iPhone程序,在屏幕正中顯示文字“Hello Word”,粗體,字體大小26磅,字體顏色紅色,有黑色陰影,陰影光源為左上角,偏移1像素,支持設(shè)備旋轉(zhuǎn)。需求分析在開始之前,我們首先來分析一下項目需求,這是一個非常簡單的項目,只要在屏幕上顯示一段“Hello World”的文字,當然還有一些附加條件: 對字體、字體顏色、字體大小有要求,有陰影效果 要求文字顯示在屏幕正中 支持設(shè)備旋轉(zhuǎn),并且無論設(shè)備如何旋轉(zhuǎn),文字都還是顯示在屏幕正中根據(jù)這些需求,我們將從簡單到復(fù)雜,逐步來實現(xiàn),分成2步來實現(xiàn):1. 在屏幕上顯示文
2、字,設(shè)置字體和字體大小,讓文字顯示在屏幕正中心2. 支持設(shè)備旋轉(zhuǎn),并且保證旋轉(zhuǎn)后文字還是居中狀態(tài)產(chǎn)品設(shè)計iPhone4之前的屏幕是320x480,到iPhone4的時候,支持了高清屏,屏幕分辨率變成了640x960。iPhone支持四個方向的旋轉(zhuǎn)的,橫屏和豎屏表現(xiàn)略有差異,因為項目需求要求支持屏幕旋轉(zhuǎn),所以針對橫屏和豎屏,界面表現(xiàn)有所差異,簡單畫一下原型設(shè)計圖如下: 系統(tǒng)分析和設(shè)計如果我們還沒iOS下的開發(fā)經(jīng)驗,那么首先需要去查閱一些相關(guān)資料,讓我們知道如何來開發(fā)一個iphone程序。蘋果為iOS的開發(fā)者提供了一個非常詳細和全面的網(wǎng)站:“iOS Developer Center”,網(wǎng)址:htt
3、p://ios。在iOS Dev Center,有所有iOS SDK的類文檔、入門文檔、各種開發(fā)指南、示例代碼庫等,開發(fā)iOS平臺的項目,免不了要經(jīng)常上來查閱一些相關(guān)資料。不過比較遺憾的是,目前iOS Dev Center的文檔和資料還是英文為主,中文資料較少,對于英文閱讀不好的同學(xué)是一個考驗。現(xiàn)在,我們從技術(shù)角度來分析一下如何實現(xiàn)項目需求。同樣一個項目,無疑是有很多種技術(shù)方案來實現(xiàn)的,所以我們有必要定一個原則,來幫助我們選擇合適的方案,這個原則就是簡單實用原則:“我們盡可能采用簡單并且實用的技術(shù)方案,避免使用復(fù)雜的技術(shù)方案,把時間和精力浪費在一些華而不實
4、的技巧上面”,本著這個原則,我們來開始對項目需求進行技術(shù)方案的選擇:在屏幕上顯示特定字體和大小的文字要在屏幕上顯示特定字體和大小的文字,我們需要先看看iOS SDK中是否已經(jīng)提供了簡單實用的方式來顯示文字,在iOS Dev Center中,有一篇文章“iOS Human Interface Guidelines”,專門講解了iOS中用戶界面相關(guān)的知識,從中我們可以系統(tǒng)的了解iOS的界面構(gòu)成,各種基本界面元素,并且根據(jù)其中的說明,可以找到UILabel控件是最適合我們項目需求的控件,當然也有復(fù)雜的技術(shù)方案,就是采用在界面上自畫的方式,根據(jù)簡單實用原則,我們就使用UILabel這種iOS自帶控件就
5、可以了。在開始使用UILabel之前,我們需要先來學(xué)習(xí)了解一下UILabel控件,想要了解UILabel控件的功能,在iOS Dev Center中,找到“UILabel Class Reference”,從中我們可以看到UILabel的介紹和所有屬性、方法等詳細的說明文檔。文檔相當全面,不過對于我們來說,關(guān)鍵還是要去獲取項目相關(guān)的資料,從文檔中,我們可以逐一找到我們顯示文字需要的相關(guān)屬性: text: Label顯示的文字,類型為NSString類,也就是本項目需求中要顯示的“Hello World”。 textAlignment: 文字在Label內(nèi)的對其方式,類型為UITextAlign
6、ment枚舉,在本項目需求中,要求文字在屏幕正中顯示,對應(yīng)的屬性值為UITextAlignmentCenter。 font: 文字的字體和大小,類型為UIFont類,也就是本項目需求中要求的:“字體為粗體,字體大小26磅”,對應(yīng)代碼為:UIFont boldSystemFontOfSize:26。 textColor: 文字的顏色,類型為UIColor類,也就是本項目需求中要求的:“字體顏色紅色”,對應(yīng)代碼為:UIColor redColor。 shadowColor: Label文字的陰影顏色,類型為UIColor類,也就是本項目需求中要求的:“有黑色陰影”,對應(yīng)代碼為:UIColor bl
7、ackColor。 shadowOffset: Label文字陰影的偏移方向和偏移量,類型為CGSize,也就是本項目需求中要求的:“陰影光源為左上角,偏移1像素”,對應(yīng)代碼為:CGSizeMake(1, 1)。讓文字顯示在屏幕正中心要讓文字顯示在屏幕正中心,我們要優(yōu)先考慮設(shè)置UILabel相關(guān)屬性達到目的的方式,如果沒有UILabel相關(guān)屬性支持,那么我們就必須根據(jù)UILabel占的大小和屏幕大小來計算它應(yīng)該擺放的坐標,從而實現(xiàn)讓文字顯示在屏幕正中心。在UILabel的文檔中,沒有發(fā)現(xiàn)有屬性設(shè)置它的坐標,也沒有設(shè)置對其的屬性,這是不是代表UILabel不支持呢?不要忽略一個問題,iOS所用的
8、編程語言是Objective-C,這個一個類似于C語言的很好的支持面向?qū)ο筇匦缘恼Z言,面向?qū)ο笥袀€很重要的特性叫繼承,同樣對于UILabel類來說,它是有父類的,也就是UILabel父類支持的屬性,UILabel都是支持的,在UILabel文檔的首頁,我們可以看到UILabel是從UIView繼承的,所以我們可以鏈接到“UIView Class Reference”文檔。從文檔中,我們可以找到2個重要屬性,用來實現(xiàn)文字顯示在屏幕正中: frame: Label的位置和尺寸屬性,類型為CGRect,在本項目需求中,要求顯示在屏幕正中,就需要通過Label控件的frame屬性的size值,結(jié)合主界
9、面的尺寸,計算出x,y坐標值,以保證Label顯示在屏幕正中。 autoresizingMask: 這個屬性表示控件在其父容器尺寸發(fā)生變化時,它是怎么自動調(diào)整其尺寸或上下左右各個方向邊距的。支持屏幕旋轉(zhuǎn)iPhone程序默認不支持屏幕旋轉(zhuǎn),那么如何讓界面支持旋轉(zhuǎn)呢?在iOS Dev Center中,可以找到“View Controller Programming Guide for iOS”,在其中的“Custom View Controllers”一章中專門有一節(jié)“Managing a View Controllers Interface Orientation”,說明了如何讓你的iOS界面支
10、持設(shè)備旋轉(zhuǎn): 重寫對應(yīng)的View Controller的“shouldAutorotateToInterfaceOrientation:”方法,在方法中申明支持的方向。 配置對應(yīng)的View Controller中的View的autoresizingMask屬性,以適應(yīng)因為界面旋轉(zhuǎn)導(dǎo)致的布局變化。在本項目中,項目需求中要求設(shè)備在旋轉(zhuǎn)也保證文字居中,利用這個屬性,可以實現(xiàn)在界面旋轉(zhuǎn)后,窗體寬度和高度發(fā)生變化時,UILabel還能繼續(xù)居中。項目開發(fā)熟悉Xcode 4經(jīng)過前期的準備工作后,現(xiàn)在可以開始基于Xcode4進行實際的項目開發(fā)。對于Xcode4,在iOS Dev Center中,找到“Xcod
11、e 4 User Guide”,這是一個專門針對Xcode 4的說明和使用指南,非常詳細。在Xcode 4中,整合了原來專門用來編輯Mac或iOS項目界面的Interface Builder軟件,“Xcode 4 User Guide”中專門有一章“Designing User Interfaces in Xcode”來講述如何在Xcode 4中編輯界面。創(chuàng)建新項目啟動Xcode4后,首先會有一個歡迎窗口,通過它,點擊“Create a new Xcode project”,可以直接開始創(chuàng)建項目當然也可以通過菜單或者快捷方式來開始創(chuàng)建新項目選擇新項目模板為方便生成項目,Xcode4默認提供了幾
12、種項目模板: Navigation-based Application: 該模板適用與需要界面導(dǎo)航的應(yīng)用,基于該模板生成的應(yīng)用程序,帶一個導(dǎo)航,顯示一個列表項 OpenGL ES Application: 該模板適用于基于OpenGL ES的應(yīng)用程序,例如游戲類程序?;谠撃0迳傻膽?yīng)用程序,帶一個用來輸出OpenGL ES場景的視圖和一個支持動畫的視圖 Splite View-based Application: 該模板適用于需要用到左右分欄視圖的iPad程序,基于該模板生成的應(yīng)用程序,提供了一個左右分欄的界面控件 Tab Bar Application: 該模板適用于適用采用標簽頁的應(yīng)用程
13、序,基于該模板生成的應(yīng)用程序,默認帶有標簽頁 Utility Application: 該模板適用與有一個主界面和一個信息頁的應(yīng)用,基于該模板生成的應(yīng)用程序,主界面上有一個信息按鈕,點擊后,有一個翻轉(zhuǎn)動畫,切換到另一個信息界面 View-based Application: 該模板適用于單一界面的應(yīng)用,基于該模板生成的應(yīng)用程序,只有一個空白界面視圖 Window-based Application: 該模板適用于空白的應(yīng)用程序,基于該模板生成的應(yīng)用程序,只有一個窗體,沒有任何視圖,需要手動添加對于我們的Hello World項目來說,最適合的項目模板是“View-based Applicati
14、on”,我們只要基于它創(chuàng)建一個單一帶有空白視圖的應(yīng)用,然后再將UILabel拖到上面就可以實現(xiàn)基本功能。項目基本選項點擊下一步,進入“Choose options for your new project”界面,在這里,可以選擇設(shè)置項目的基本選項,其中: Product Name: 指產(chǎn)品名稱,在這里項目中,我們直接命名為“Hello World” Company Identifier: 公司標識符,一般命名規(guī)則為 “com.公司名” Bundle Identifier: 指包標識符,用于唯一標識應(yīng)用程序,默認會根據(jù)公司標識符和產(chǎn)品名來組合生成 Device Family: 指該應(yīng)用支持的設(shè)備
15、類型,共三個選項:iPhone、iPad、Universal(即iPhone、iPad通用) Include Unite Tests: 是否包含單元測試代碼模板,如果勾選,Xcode會幫助生成單元測試代碼模板選擇存儲路徑點擊Next按鈕后,進入選擇文件存儲路徑界面,在這里,可以選擇要存儲項目的目錄。項目創(chuàng)建完成點擊“Create”按鈕,項目創(chuàng)建完成,彈出項目窗口。試運行項目經(jīng)過上面的步驟,我們已經(jīng)基于模板創(chuàng)建了一個項目,在開始開發(fā)前,我們可以嘗試先試運行一下項目,看看效果。點擊Xcode左上角的“Run”按鈕,Xcode即開始對項目進行編譯,編譯完成后,會彈出iPhone模擬器,在模擬器中運行
16、項目,當然我們的項目現(xiàn)在運行起來還只能看到一個空白的界面。點Xcode左上角的“Stop”按鈕,停止運行項目。編輯界面文件一般創(chuàng)建一個新項目,在項目中會包含一個或多個界面文件,這些界面文件一般稱之為“nib文件”,擴展名為nib或xib?;蛘咄ㄟ^向?qū)?chuàng)建一個新的View Controller的時候,Xcode會包含一個對應(yīng)的nib文件,一個頭文件和一個實現(xiàn)文件。在我們剛剛以View-based Application為模板創(chuàng)建的Hello World項目中,“Hello_WorldViewController.xib”就是主界面的nib文件。在Xcode左側(cè)選中“Hello_WorldView
17、Controller.xib”文件,并點擊工具欄的“Hide or show the Navigator”和“Hide or show the Utilities ”按鈕,隱藏左側(cè)Navigator區(qū)域,顯示Utility區(qū)域,這樣我們就可以開始在Xcode 4中來編輯界面。添加Label到界面中從對象庫中,找到我們所需要的Label控件對象,拖動到主界面中,即完成Label控件的添加設(shè)置Label控件屬性選中新添加的Label控件,點擊Inspector selector bar區(qū)域的“Show the Attributes inspector”按鈕,切換到屬性編輯界面,分別設(shè)置以下屬性:
18、Text: 輸入“Hello World” Alignment: 選擇居中對齊 Font: 選擇“Helvetical Bold 26.0” Text Color: 選擇紅色 Shadow: 選擇黑色(Black Color) Shadow Offset: Horizontal和Vertical的值分別輸入1設(shè)置Label控件的大小和位置在上面的步驟中設(shè)置好Label的相關(guān)屬性后,發(fā)現(xiàn)文字特別小,而且顯示不完整,并非我們所選擇的字體大小,這是由于UILabel有一個屬性“adjustsFontSizeToFitWidth”,默認值是“YES”,如果這個屬性的值為YES,并且Label的numb
19、erOfLines屬性值是1,它會根據(jù)Label的寬度來自動調(diào)整字體大小,通過Xcode新添加的Label,默認寬度比較小,按照正常的26磅大小的字體,無法完整顯示,所以就字體大小就被自動調(diào)整了,導(dǎo)致顯示的和我們期望的不一樣。解決這個問題很簡單,就是我們重新設(shè)置一下Label的寬度,以讓其可以完整顯示文字。選中新添加的Label控件,點擊Inspector selector bar區(qū)域的“Show the Size inspector”按鈕,切換到尺寸和位置設(shè)置界面,對寬度進行調(diào)整,這里我們給Label設(shè)置一個足夠的寬度和高度:200x40,以保證字體不會被縮小。接下來,就是要調(diào)整Label的
20、位置,讓它顯示在屏幕的正中間。在Xcode中,用鼠標拖動Label,拖動過程中Xcode有輔助線來幫助定位,很容易就可以找到正中心的位置。當然也可以通過簡單的計算得到Label如果要顯示在正中心,坐標應(yīng)該為:x = (屏幕寬度 - Label寬度) / 2 = (320 - 200) / 2 = 60; y = (屏幕高度 - 狀態(tài)欄高度 - Label高度) / 2 = (480 - 20 - 40) / 2 = 210;對修改過的xib文件保存,運行項目,看看效果就這樣,我們已經(jīng)完成了第一步:在屏幕上顯示文字,設(shè)置字體和字體大小,讓文字顯示在屏幕正中心。下一步,我們要讓它支持旋轉(zhuǎn),并且旋轉(zhuǎn)
21、后,文字還是顯示在屏幕正中。支持設(shè)備旋轉(zhuǎn)前面我們已經(jīng)學(xué)習(xí)了解過,要支持設(shè)備宣傳,要做如下工作: 重寫對應(yīng)的View Controller的“shouldAutorotateToInterfaceOrientation:”方法,在方法中申明支持的方向。也就是首先要重寫“Hello_WorldViewController.m”中的“shouldAutorotateToInterfaceOrientation:”方法 配置對應(yīng)的View Controller中的View的autoresizingMask屬性,以適應(yīng)因為界面旋轉(zhuǎn)導(dǎo)致的布局變化。也就是要設(shè)置好Label控件的autoresizingMa
22、sk屬性。還是在界面文件中,選中Label,在尺寸和位置設(shè)置界面,通過點擊Autosizing中的紅色線條,設(shè)置Label對上下左右四個方向以及寬度和高度都自動調(diào)整,這樣就可以保證在設(shè)備旋轉(zhuǎn)后,界面的寬度和高度發(fā)生改變后,控件對上下左右四個方向的位置以及長度和寬度也會隨著一起調(diào)整,由于已經(jīng)設(shè)置了文字在Label內(nèi)部是居中對齊的,就可以保證文字顯示在界面居中的位置。點擊工具欄的“Hide or show the Navigator”和“Hide or show the Utilities ”按鈕,顯示左側(cè)Navigator區(qū)域,隱藏Utility區(qū)域,在左側(cè)Navigator區(qū)域,選中“Hell
23、o_WorldViewController.m”文件,找到“shouldAutorotateToInterfaceOrientation:”方法,對其進行重寫,重寫后代碼如下- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation/ Return YES for supported orientationsreturn YES;對所做的修改進行保存,然后運行項目,彈出模擬器,通過調(diào)用模擬器的設(shè)備旋轉(zhuǎn)菜單,讓iPhone模擬器變成橫屏,你將看到文字會自動調(diào)整位置,還是顯示
24、在屏幕正中的位置。至此,我們就實現(xiàn)了項目的全部需求。項目總結(jié)通過Hello World這個簡單項目,我們學(xué)習(xí)了如何基于Xcode 4分析和開發(fā)iOS項目,學(xué)習(xí)了如何通過iOS Dev Center獲取需要的資料。第二個iPhone應(yīng)用程序:“Say Hello”項目需求寫一個iPhone應(yīng)用程序,要求可以輸入名字,點擊按鈕后,會顯示一段文字向輸入的名字打招呼,例如輸入“寶玉”,顯示“你好,寶玉!”需求分析這是一個很簡單的應(yīng)用程序,包含一個文本輸入框,一個文本顯示框,一個按鈕。輸入名字到文本輸入框,再點擊按鈕,這時文本顯示框的文字就會變成“你好,!”。但是要注意,如果用戶輸入為空,要有警告提示用
25、戶重新輸入;如果用戶輸入文字太長,超過16個字符,要自動截斷。產(chǎn)品設(shè)計根據(jù)項目需求,畫出相應(yīng)的產(chǎn)品原型圖:初始狀態(tài)初始時,文本輸入框為空,但是顯示水印,提醒用戶可以輸入姓名。文本顯示框文字為空。輸入名字并點擊按鈕后輸入名字,并點擊按鈕后,屏幕中間顯示文字:“您好,!”。沒有輸入名字的警告提示如果沒有輸入名字,點擊按鈕后彈出警告窗口,提醒用戶輸入名字。系統(tǒng)分析這是一個非常簡單的應(yīng)用程序,實現(xiàn)思路不不算復(fù)雜: 一個文本輸入框,用來輸入文字,需要限制最大字符長度為16個字符,輸入框沒有內(nèi)容時,顯示水印文字。UITextField控件正好可以滿足需求。 一個文本顯示框,用來顯示最終生成的文字。使用UI
26、Label控件即可滿足需求。 一個按鈕,點擊后,獲取文本輸入框文字內(nèi)容,生成“你好,!”文字,并顯示在文本顯示框中。如果點擊時文本輸入框文字為空,彈出警告提示框。同時,這個應(yīng)用程序在開發(fā)過程中,需要應(yīng)用到iPhone開發(fā)中一些常用的設(shè)計模式:3. 委托(Delegate)4. 模型 視圖 控制器(MVC)5. 目標 - 動作(Target-Action)委托(Delegate)委托模式是一個對象周期性地向被指定為其委托的另一個對象發(fā)送消息,向其請求輸入或者通知某件事情正在發(fā)生。該模式可替換類繼承來對可復(fù)用對象的功能進行擴展。在本項目中,應(yīng)用程序?qū)ο髸蚱湮邪l(fā)送消息,通知它主要的啟動例程已經(jīng)完
27、成并且定制的配置可開始執(zhí)行。為了建立并管理視圖,委托會創(chuàng)建一個控制器實例。另外,當用戶點擊Return按鍵后,文本字段也會通知它的委托(即所創(chuàng)建的控制器對象)委托方法通常會集中在一起形成一份協(xié)議。 一份協(xié)議基本上就是一個方法的列表。如果一個類遵循某個協(xié)議,則它要保證實現(xiàn)協(xié)議所要求的方法(有些方法可選擇實現(xiàn)與否)。委托協(xié)議規(guī)定了一個對象可以發(fā)送給委托的所有消息。例如常見的有:UITextFieldDelegate, UIApplicationDelegate, UIScrollViewDelegate, UITableViewDelegate, UIWebViewDelegate。模型 視圖 控
28、制器(MVC)MVC模式將應(yīng)用程序中的對象設(shè)定為三種角色:模型角色(Model)、視圖角色(View)和控制器角色(Controller)。模型對象(Model)表示數(shù)據(jù)。例如,在iPhone自帶的通訊錄應(yīng)用中,聯(lián)系人是模型對象,在一個繪畫應(yīng)用中,圓形、矩形是模型對象。本項目的應(yīng)用程序用到的數(shù)據(jù)非常簡單字符串,并且該字符串只有在按鈕點擊的方法中用到。其實換一種角度來說,字符串也是一種最簡單的模型對象,在其他的應(yīng)用程序中,模型對象將會更加復(fù)雜,并且模型對象在程序中無處不在,可以在多個地方進行訪問。視圖對象(View)負責(zé)顯示數(shù)據(jù),比如UILabel可以顯示文本、UIImageView可以顯示圖片
29、,也會支持用戶對數(shù)據(jù)的編輯操作,例如UITextField可以支持用戶輸入。在我們接下來要創(chuàng)建的項目中,需要一個主視圖來包含其它幾個視圖首先是一個文本輸入框,它用于捕獲用戶輸入信息;然后是一個文本顯示框,它用于顯示文本,而文本內(nèi)容則是基于用戶的輸入;另外還需要一個按鍵,讓用戶可以點擊它,點擊后通知文本字段更新??刂破鲗ο?Controller)介于模型和視圖之間。在我們接下來要創(chuàng)建的項目中,當用戶點擊按鈕后,觸發(fā)更新操作,控制器對象將會從文本輸入框中獲取輸入的文字內(nèi)容,并把文字存放在一個字符串中,然后再把文本顯示框的內(nèi)容更新成格式化好的內(nèi)容。結(jié)合MVC模式,對于本項目的主要流程,整個如圖所示:
30、目標 - 動作(Target - Action)目標-動作機制,允許一個控件對象(例如按鍵或滑動條) 向另外一個對象發(fā)送一條消息(即動作),以之作為對某個用戶事件(例如一個點擊事件)的響應(yīng)。接收到消息的對象則可以對消息進行響應(yīng),并針對業(yè)務(wù)要求做出處理。在本項目中,當點擊按鈕時,它會通知控制器去獲取文本輸入框內(nèi)容,并根據(jù)輸入內(nèi)容更新文本顯示框。開發(fā)創(chuàng)建項目我們將開始使用Xcode來創(chuàng)建項目,啟動Xcode(缺省情況下,Xcode位于 /Developer/Applications 里面),然后選擇File New New Project,這樣就可以創(chuàng)建一個新的工程。應(yīng)該可以看到一個新的窗口,如下
31、圖所示:選中 Window-Based Application 并點擊 Next 按鈕,輸入Product Name(項目名):SayHello,在Company Identifier那,可以輸入公司名唯一標識。點擊Next,選擇項目存儲位置,最后點擊Create按鈕。完成上述步驟后,將看到如下的新項目窗口:在進行下一步工作之前,可以先編譯運行一下程序,這樣就可以通過模擬器看到程序運行后的樣子。在Xcode的菜單中選擇 Product Run 或者點擊左上角工具欄上的 Run 按鈕,iPhone模擬器應(yīng)該會自動啟動。當應(yīng)用程序啟動后,可以看到一個白色屏幕。應(yīng)用程序啟動過程解析通過Xcode的模
32、板創(chuàng)建項目時,模板已經(jīng)幫助設(shè)置好了應(yīng)用程序基本程序環(huán)境,它會幫助創(chuàng)建一個應(yīng)用程序?qū)ο?,將?yīng)用程序和窗口連接起來,建立一個運行環(huán)境。整個啟動過程從UIApplicationMain函數(shù)開始,如下圖所示:main.m文件中的main函數(shù)會調(diào)用UIApplicationMain函數(shù):int retVal = UIApplicationMain(argc, argv, nil, nil); 該函數(shù)將會創(chuàng)建一個UIApplicaion類的實例。同時它會搜索應(yīng)用程序的Info.plist屬性列表文件。 Info.plist文件是一部字典,它主要包含諸如應(yīng)用程序名稱、圖標這樣的信息,它也包含應(yīng)用程序?qū)ο髴?yīng)該
33、加載的nib 文件(雖然該文件的擴展名為“xib”,但是我們習(xí)慣稱之為“nib 文件”)的名稱。Nib文件主要有用戶界面的信息。本項目的Info.plist文件具有下面的內(nèi)容:術(shù)語: 雖然Interface Builder文檔的擴展名可能是“.xib” ,但歷史上,其擴展名是“.nib”(“NextStep Interface Builder”的首字母縮寫),因此人們就俗稱其為“Nib文件”。這表明應(yīng)用程序啟動時將會加載MainWindow nib文件。在Xcode中可以單擊MainWindow.xib進行查看(注意在Xcode4中已經(jīng)不需要通過Interface Builder來打開nib文
34、件,可以直接在Xcode對nib文件進行查看和編輯):MainWindow Nib文檔包含4個對象: Files Owner,文件擁有者代理對象,在這里MainWindow的擁有者對象時UIApplication實例 First Responder,第一響應(yīng)者代理對象,在本項目中,沒有使用到 Say Hello App Delegate,SayHelloAppDelegate的實例,也就是應(yīng)用程序的委托 Window,一個窗口對象。它默認是白色背景,程序啟動時看到的就是它應(yīng)用程序?qū)ο笤谕瓿蓡雍?,會向委托發(fā)送applicationDidFinishLaunching:消息,通知程序已經(jīng)啟動成功
35、了,這樣我們可以在收到這個消息后根據(jù)需要進行一些操作。下圖是一個簡化的iPhone應(yīng)用程序生命周期圖,簡要展示了發(fā)生在應(yīng)用程序啟動到退出的過程。這樣,我們基本了解了如何創(chuàng)建一個項目,以及一個應(yīng)用程序的啟動過程,接下來,我們需要創(chuàng)建一個視圖控制器(UIViewController)實例,用來實現(xiàn)項目功能。添加視圖控制器(UIViewController)添加視圖控制器文件在iPhone應(yīng)用程序中,視圖控制器(UIViewController)起著核心作用。顧名思義,視圖控制器負責(zé)管理控制視圖。在iPhone上,它們也幫助進行導(dǎo)航和內(nèi)存管理。選中Xcode項目管理器里的項目(即SayHello項目
36、,位于Groups and Files列表的頂部)或者選中SayHello文件夾新文件在添加時會被加入到當前選擇的位置。 選中后,在Xcode菜單中選擇 File New New File,也可以在選中的文件夾上面點右鍵,選擇 New File。在New File窗口中,請選擇Cocoa Touch,然后選擇UIViewController subclass。點擊 Next 按鈕,在Options窗口,請勾選 “With XIB for user interface”復(fù)選框。選中 “With XIB for user interface”后,Xcode在創(chuàng)建視圖控制器的同時,會為其創(chuàng)建一份ni
37、b文件,并將該文件添加到項目中。點擊Next按鈕,在其后出現(xiàn)的保存文件窗口中,為文件起個名字,例如RootTimelineViewController,并選擇文件存儲的位置,如下所示:點擊 Save,文件會被添加到項目中。接下來,我們將創(chuàng)建控制器類的實例。創(chuàng)建視圖控制器實例現(xiàn)在,我們有了視圖控制器的類和nib文件,但要在應(yīng)用程序代理中使用它,還必須創(chuàng)建類的實例,并且將實例存儲在變量中,以便操作它。在應(yīng)用程序委托類的頭文件(即SayHelloAppDelegate.h)中執(zhí)行下述操作:在一個類中訪問另一個類,首先需要引用被訪問類的頭文件。所以我們先在應(yīng)用程序委托頭文件(SayHelloAppDe
38、legate.h)的接口聲明前面-即SayHelloAppDelegate聲明前面引用視圖控制器(RootViewController)的頭文件:#import RootViewController.h 然后在頭文件大括號之間添加下面的代碼,這是為了向應(yīng)用程序委托添加一個實例變量:RootViewController *viewController;在大括號之后 end之前添加下面的屬性聲明:property (nonatomic, retain) RootViewController *viewController;在頭文件中添加完相應(yīng)變量和屬性申明后,需要在對應(yīng)的實現(xiàn)文件中,合成屬性的存取
39、方法,在dealloc方法中釋放視圖控制器的實例。在應(yīng)用程序委托類的實現(xiàn)文件(即SayHelloAppDelegate.m)中執(zhí)行下述操作:在類的 implementation代碼塊中通知編譯器為視圖控制器合成存取方法:synthesize viewController;在dealloc方法起始處釋放視圖控制器:viewController release;我們已經(jīng)把視圖控制器屬性添加到應(yīng)用程序的委托,現(xiàn)在需要實際創(chuàng)建一個視圖控制器實例,并將其設(shè)置為屬性的值。在應(yīng)用程序委托類實現(xiàn)文件(即SayHelloWorldAppDelegate.m文件)中的applicationDidFinishLau
40、nching: 方法開頭添加如下代碼,這些代碼用于創(chuàng)建一個RootViewController實例:RootViewController *controller = RootViewController allocinitWithNibName:RootViewController bundle:nil;self.viewController = controller;controller release;這段代碼的作用如下: 創(chuàng)建RootViewController這個視圖控制器的實例。使用alloc方法創(chuàng)建一個視圖控制器,然后用initWithNibName:bundle:方法對其進行初始
41、化。init方法先指定控制器應(yīng)加載的nib文件,然后指定在哪個程序包中可找到該文件。程序包是文件系統(tǒng)某個位置的抽象,該位置存放了應(yīng)用程序?qū)玫降拇a和資源。 使用屬性的存取方法,將創(chuàng)建好的視圖控制器實例設(shè)置為viewController屬性變量的值 根據(jù)內(nèi)存管理規(guī)則釋放視圖控制器視圖控制器用來配置和管理在應(yīng)用程序中看到的視圖,每一個視圖也對應(yīng)有一個視圖控制器來管理。窗體(window)有一個根視圖控制器這個視圖控制器負責(zé)配置當窗體顯示時最先顯示的視圖。要讓你的視圖控制器的內(nèi)容顯示在窗體中,需要去設(shè)置窗體的根視圖控制器為你的視圖控制器。所以我們的項目中,在上面創(chuàng)建視圖控制器實例代碼后面再添加一
42、行代碼,來設(shè)置窗體的根視圖控制器為我們新添加的視圖控制器:self.window.rootViewController = controller;最后一行來自于Xcode提供的模板自動生成的代碼:self.window makeKeyAndVisible;這行代碼會讓包含了視圖控制器視圖的Window窗口顯示在屏幕上。本章完整代碼,SayHelloAppDelegate.h文件:#import #import RootViewController.hinterface SayHelloAppDelegate : NSObject RootViewController *viewControll
43、er;property (nonatomic, retain) IBOutlet UIWindow *window;property (nonatomic, retain) RootViewController *viewController;endSayHelloAppDelegate.m文件:#import SayHelloAppDelegate.himplementation SayHelloAppDelegatesynthesize window=_window;synthesize viewController;- (BOOL)application:(UIApplication *
44、)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsRootViewController *controller = RootViewController allocinitWithNibName:RootViewController bundle:nil;self.viewController = controller;controller release;self.window.rootViewController = controller;self.window makeKeyAndVisible
45、;return YES;- (void)dealloc_window release;viewController release;super dealloc;end測試運行在Xcode的菜單中選擇 Product Run 或者點擊左上角工具欄上的 Run 按鈕,iPhone模擬器應(yīng)該會自動啟動。當應(yīng)用程序啟動后,還是看到一個白色屏幕,不過第一次看到的白色屏幕,是應(yīng)用程序代理中的Window,而這次看到的白色屏幕,是視圖控制器RootViewController中的視圖。下一步,我們將開始對界面進行編輯。編輯Nib文件在iPhone開發(fā)中,一般都會用NIB文件來來負責(zé)界面顯示,也就是MVC模型
46、里面的視圖對象,而NIB文件只包含用戶界面元素,不包含任何源碼,那么怎么讓視圖對象和視圖控制器關(guān)聯(lián)起來呢?這就需要用到兩個非常重要的概念:插座變量(outlet)和文件擁有者代理對象(Files Owner)。視圖控制器的視圖和Nib文件視圖控制器主要的職責(zé)就是配置和管理應(yīng)用程序中所有的視圖,一般來說,視圖控制器的視圖是放在一個Nib文件中,當然也可以不需要Nib文件,通過程序創(chuàng)建視圖,典型的如UITableViewController這樣的視圖控制器,就可以不需要Nib文件。在創(chuàng)建視圖控制器實例時,其中一個主要的構(gòu)造函數(shù) initWithNibName:bundle: 的第一個參數(shù)就是視圖控
47、制器對應(yīng)的Nib文件的名字。視圖控制器在其 loadView 方法中加載它的Nib文件。如果是使用 initWithNibName:bundle: 構(gòu)造函數(shù)生成的實例,并且你想在視圖加載完成后進行額外的設(shè)置,只要重寫視圖控制器的 viewDidLoad 方法就好了。在Xcode中點擊打開視圖控制器的Nib文件(即RootViewController.xib文件),在Xcode中即可直接查看和編輯。文件包含三個對象,文件擁有者代理(Files Owner),第一響應(yīng)者代理(First Responder)以及一個視圖(View)。視圖(View)是視圖控制器的主視圖,在主視圖中還可以添加若干子視
48、圖。文件擁有者代理(Files Owner)代表Nib文件對應(yīng)的視圖控制器類。理解文件所有者代理的角色,以及如何建立文件所有者和Nib文件中界面元素之間的連接,是非常重要的。小貼士: 在Xcode中編輯Nib文件時,可以通過點擊右上角工具欄按鈕 顯示隱藏相應(yīng)面板,方便對界面編輯和屬性設(shè)置。文件擁有者(Files Owner)在一個Nib文件中,文件擁有者對象是其中最重要的對象之一,因為正是通過它,來建立起應(yīng)用程序代碼和Nib界面文件中對象之間的連接,具體來說,它就是對應(yīng)Nib文件的視圖控制器對象。以本項目為例,RootViewController.xib這個Nib文件的文件擁有者對象就是Roo
49、tViewController類的實例。一般來說,在使用模板同時創(chuàng)建UIViewController文件和對應(yīng)的Nib文件時,它默認會設(shè)置Nib文件對應(yīng)的文件擁有者為創(chuàng)建的UIViewController類。如果要修改或者設(shè)置Nib文件對應(yīng)的文件擁有者,可以使用 Identity Inspector 面板進行設(shè)置。如上圖所示, 本項目的RootViewController.xib文件對應(yīng)的文件所有者,在Identity Inspector 面板中,Custom Class部分的Class項,可以看到對應(yīng)的值是RootViewController,這表示文件擁有者就是RootViewContro
50、ller類的實例,就可以在Xcode中訪問文件擁有者類里面標志為IBOutlet的屬性和IBAction的方法,和Nib文件中的界面元素建立關(guān)聯(lián)。視圖插座變量在Xcode中,使用 Inspector 面板,或者在連接面板,可以查看、創(chuàng)建、刪除對象之間的連接。要查看視圖控制器的連接,可以通過以下步驟: 在Xcode的界面中,從左側(cè)的文件組選中要查看的視圖控制器的Xib文件 在視圖編輯界面,點擊選中 Files Owner 在 Inspector 面板,選中 Connection inspector,這里會顯示文件所有者所有的插座連接 在視圖編輯界面,按住Control鍵點擊 Files Owne
51、r 或者在 Files Owner上點擊右鍵,彈出一個黑色半透明的面板顯示文件所有者的所有連接在上面第三步,右側(cè)面板顯示的連接面板和右鍵點擊Files Owner彈出的半透明連接面板,顯示的信息和作用都是一樣的,可以根據(jù)個人習(xí)慣靈活使用。到目前為止唯一的連接是視圖控制器的 view 插座變量。一個插座變量就對應(yīng)視圖控制器類的一個屬性(有時候也可以是一個實例變量),只不過這個屬性和nib文件中的某個界面元素連接在一起。此處的view的連接,表明當nib文件 RootViewController.xib 被加載,并且UIView的實例解檔之后,視圖控制器的view實例變量會被設(shè)置為指向nib文件中
52、的視圖。中間測試在項目開發(fā)中,尤其在對開發(fā)工具和語言不熟悉的時候,需要經(jīng)常性的對新增的功能進行測試,以確保當前功能運行是正常的。比如我們新增了RootViewController這個自定義視圖控制器,需要去測試一下它是不是已經(jīng)成功添加。要測試視圖控制器工作正常,簡單的辦法修改視圖控制器的視圖的背景色,例如修改為粉紅色背景,然后重新運行,看看是不是界面變成了紅色背景。要設(shè)置視圖控制器的視圖的背景色,步驟如下: 在Xcode的界面中,從左側(cè)的文件組選中視圖控制器的Xib文件(RootViewController.xib) 在右側(cè)的功能區(qū)域,選擇屬性面板(Attributes inspector)
53、在編輯區(qū)域,選擇視圖 在視圖的屬性面板,點擊背景色(Background)對應(yīng)的顏色下拉框,會彈出顏色選擇面板 在顏色選擇面板,選擇一個合適的顏色,例如粉紅色 保存nib文件 點擊左上角工具欄的Run按鈕,編譯運行項目正常情況下,編譯應(yīng)該不會出現(xiàn)任何錯誤,運行后會彈出模擬器,結(jié)果如下圖所示:確認沒有問題后,再將應(yīng)用的背景色還原。還原的話,將視圖的背景色設(shè)置為白色就好了。配置視圖Xcode提供了一套對象庫,可以直接添加到Nib文件中。其中一部分示界面元素,例如按鈕和文本輸入框;其他一部分是控制器對象,例如視圖控制器。我們當前項目的nib文件已經(jīng)包含了視圖,現(xiàn)在只要添加按鈕和文本輸入框就好了。從對
54、象庫中將用戶界面元素拖動到視圖中,基本步驟如下: 在Xcode的界面中,從左側(cè)的文件組選中視圖控制器的Xib文件(RootViewController.xib) 在右側(cè)的功能區(qū)域,顯示對象庫(object library) 添加一個按鈕(UIButton),一個文本輸入框(UITextField),兩個文本標簽(UILabel)到視圖中。可以從對象庫里面拖動并將它們放到視圖 參考前面的原型設(shè)計,對界面元素的尺寸和布局進行調(diào)整 將右側(cè)功能區(qū)域切換到屬性面板(Attributes inspector) 選中文本輸入框(Text Field),設(shè)置Placehold屬性為“請輸入姓名” 選中左上側(cè)的
55、文本標簽(UILabel),設(shè)置Text屬性為“姓名” 選中下面的文本標簽(UILabel),設(shè)置Text屬性為空,Alignment屬性設(shè)置為居中對齊 選中按鈕(UIButton),設(shè)置Title屬性為“招呼” 設(shè)置好的界面如下所示:如果我們想讓用戶在輸入時有一些更好的體驗,比如用戶輸入英文名時,默認會首字母大寫;比如鍵盤會顯示完成(Done)按鍵,點擊后完成輸入隱藏鍵盤。要支持這樣的輸入細節(jié),通過設(shè)置文本框?qū)傩跃涂梢酝瓿桑?在Capitalization下拉列表,選擇Words,以支持首字母大寫 在Return Key下拉列表,選擇Done,以支持鍵盤上顯示完成(Done)按鍵保存文件后,
56、編譯運行程序,可以看到運行的界面效果和我們在Xcode中擺放的效果是一樣的。點擊按鈕,按鈕會高亮,在文本輸入框中點擊,會彈出輸入鍵盤,鍵盤里可以看到完成(Done)按鈕。但是還不能根據(jù)輸入的內(nèi)容去顯示文字,還不能隱藏鍵盤,因為目前我們還僅僅完成了視圖部分的工作,還需要讓視圖中的對象和視圖控制器的對象之間建立連接,并添加相應(yīng)的邏輯,才能實現(xiàn)。實現(xiàn)視圖控制器實現(xiàn)視圖控制器需要完成以下幾件事: 定義插座變量和動作方法,和Nib文件的視圖中的界面元素進行關(guān)聯(lián) 實現(xiàn)點擊按鈕后的相關(guān)邏輯根據(jù)輸入的名字顯示相應(yīng)的招呼語,判斷輸入的名字是不是為空是不是超長 用戶點擊鍵盤上的完成(Done)按鍵后,鍵盤會消失建立連接從業(yè)務(wù)角度來看,我們需要和界面的幾個元素建立關(guān)聯(lián):1. 文本輸入框,獲取它的輸入文字2. 文本標簽,讓它顯示特定文字3. 按鈕,響應(yīng)它的點擊事件在Xcode4之前,Interface Builder和Xcode是分開的,一般是先在Xcode中定義好插座變量和動作方法,然后再在InterfaceBuilder中去建立界面元素和視圖控制器之間的連接,到Xcode4之后,Interface Builder和Xcode已經(jīng)統(tǒng)一合并在了一起,所以這部分也有一些變化,Xcode4讓這部分工作變
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023三年級語文下冊 第一單元 2 燕子配套說課稿 新人教版
- 2024-2025學(xué)年高中語文 名著導(dǎo)讀 莎士比亞戲劇說課稿 新人教版必修4
- 9古詩三首清明說課稿2023-2024學(xué)年統(tǒng)編版語文三年級下冊
- Unit 4 Natural Disasters Reading for Writing 說課稿-2024-2025學(xué)年高中英語人教版(2019)必修第一冊
- Unit 2 lconic Attractions Learning About Language (1)說課稿 2023-2024學(xué)年高中英語人教版選擇性第四冊
- 2025主體信用評級合同
- 2025吊頂勞務(wù)承包合同
- 19《夜宿山寺》(說課稿)2024-2025學(xué)年部編版語文二年級上冊
- 2024-2025學(xué)年高中生物 第一章 人體的內(nèi)環(huán)境與穩(wěn)態(tài) 專題1.2 內(nèi)環(huán)境穩(wěn)態(tài)的重要性說課稿(基礎(chǔ)版)新人教版必修3001
- 7《壓歲錢的使用與思考》(說課稿)-2023-2024學(xué)年四年級下冊綜合實踐活動長春版
- 山林養(yǎng)豬可行性分析報告
- 校本課程生活中的化學(xué)
- DB43-T 2775-2023 花櫚木播種育苗技術(shù)規(guī)程
- 《我的家族史》課件
- 湖北省技能高考機械類模擬試題
- 高空作業(yè)安全方案及應(yīng)急預(yù)案
- 蘇教版科學(xué)2023四年級下冊全冊教案教學(xué)設(shè)計及反思
- 八-十-天-環(huán)-游-地-球(讀書)專題培訓(xùn)課件
- 新會中集:集裝箱ISO尺寸要求
- 化學(xué)品-泄露與擴散模型課件
- 漢語言文學(xué)論文6000字
評論
0/150
提交評論