十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開發(fā)實驗_第1頁
十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開發(fā)實驗_第2頁
十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開發(fā)實驗_第3頁
十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開發(fā)實驗_第4頁
十一章基于物聯(lián)網(wǎng)ios app應(yīng)用開發(fā)實驗_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十一 基于物聯(lián)網(wǎng)的第十一 基于物聯(lián)網(wǎng)的IOSAPP應(yīng)用設(shè)計實 ios介 編寫iOS應(yīng)用程序有何不 在Xcode中創(chuàng)建項 Xcode項目窗 Xcode跳轉(zhuǎn) MVC方 第十一基于物聯(lián)網(wǎng)第十一基于物聯(lián)網(wǎng)的iosAPP應(yīng)用設(shè)計 ios11.1.1必要開始編寫iOS應(yīng)用程序之前,需要做一些準(zhǔn)備工作。初學(xué)者需要一臺安裝了MountainLion(OSX10.8)Mavericks(OSX10.9)Intel架構(gòu)的Macintosh計算機。任何最近上市的基于Intel架構(gòu)的Macintosh計算機iOSiOSLoginAppleLoginAppleIDApple就點擊Joinnow創(chuàng)建一個ID,然后再登錄。登錄之后就進(jìn)入了iOS開發(fā)中心的進(jìn)行iOS應(yīng)用開發(fā)。iOS開發(fā)中最重要的工具是Xcode,它是蘋果的集成開發(fā)環(huán)境(IDE)Xcode提供了一些實用工具,用于創(chuàng)建和調(diào)試源代碼、編譯應(yīng)用程序,以及對應(yīng)用程序進(jìn)行性能調(diào)優(yōu)??梢詮腗acAppStore下載Xcode(可以MacAppleAppStore)SDKXcode版本的不斷更XcodeiOSSDKMacAppStore中了,同時也會在開發(fā)者網(wǎng)站上提供預(yù)覽版供開發(fā)者下載。總之,如果想下載Xcode和iOSSDK的最新版本(非beta版),應(yīng)該使用MacAppStore。本書面向最新版SDK。在一些地方,我們會使用iOS7中引入的新函數(shù)或方法,它們可能與舊版SDK不兼容。當(dāng)然,出現(xiàn)這些情況時我們會特別指出。請從或者本書論壇上下載最新的源代碼①SDK發(fā)布時,我們會 開發(fā)者XcodeMac創(chuàng)建并運行iPhone和iPad應(yīng)用。這個模擬器對于學(xué)習(xí)編寫iOS程序極其有用。SDKiPhoneiOSAppStore99美元/AppStoreiOS設(shè)299美元//programs/ios(標(biāo)準(zhǔn)版計劃)/programs/ios(標(biāo)準(zhǔn)版計劃)iOS所支持的始終聯(lián)網(wǎng)的移動設(shè)備(iPhone),iOSMacMac售程序)iPodtouchWi-FiiPad程序可能會在共享網(wǎng)絡(luò)中降低性能。開發(fā)iOS應(yīng)用似乎有很高的門檻,但是蘋果99VisualStudio(IDE)iPhoneiPodtouchiPadiOS模擬器進(jìn)行測試,但并非所有程序都是如此。即便是那些可以在模擬器上運行11.2iOS應(yīng)用程序有何如果從未使用Cocoa11.2iOS應(yīng)用程序有何如果從未使用Cocoa(或者它的前輩NeXTSTEP和OpenStep)寫過程序,你CocoaTouch(iOS應(yīng)用程序的應(yīng)用程序框架)比較新奇。它與其他常用應(yīng)用程序框架(如用于構(gòu)建.NET或Java應(yīng)用程序的框架)之間存在CocoaTouchCocoaNeXTSTEPiOSSDKMacOSXCocoa中原樣移植過來的。即便是那些不同的類,也遵循相同的基本原則和相似的設(shè)計模式。但是,Cocoa和CocoaTouch之間還是有一些不同的。無論你的知識背景如何,都需要時刻牢記iOS11.2.1只能同時運行一個在iOS中,任意時刻只能有一個應(yīng)用處于活動狀態(tài)并顯示在屏幕上。從iOS開始,用戶按下Home鍵后,應(yīng)用程序可以在后臺繼續(xù)運行,但這也只限于少數(shù)CPUiOS11.2.2只有一個iOSiOS設(shè)備屏幕的大小,是固定11.2.3有限的訪問iOS嚴(yán)格限制了應(yīng)用程序的訪問權(quán)限。iOSiOS11.2.4有限的iOS嚴(yán)格限制了應(yīng)用程序的訪問權(quán)限。iOSiOS11.2.4有限的響應(yīng)iOSHome鍵查看最近使用的應(yīng)用列表。如果用戶按HomeiOS返回主屏幕,應(yīng)用必須快速保存一切內(nèi)容并退出。如果沒有在5秒之內(nèi)保存必要11.2.5有限的屏幕iPhoneiPhoneiPhoneiPhoneiPhone像素×480像素×960iPhoneiPhone4640×1136像素。像素數(shù)量有了極大的提高,但是屏幕的顯示空間卻沒有大的變化,iPhone所能提iPad1024像素×768大。下面來做一個有趣的對比,寫作本書時,蘋果最便宜的iMac的分辨率是1920像素×1080大。下面來做一個有趣的對比,寫作本書時,蘋果最便宜的iMac的分辨率是1920像素×1080像素,最便宜的筆記本電腦(11MacBookAir)的分辨率1366像素×76827LEDCinemaDisplay則支持高達(dá)2560像素×1440像素的超高分辨率。請注意,對于iPad而言,如果不出意外的話,往后的iPad機型(iPad2以后的全尺寸iPad以及iPadMini屏幕的iPhone一樣,這塊2048像素×1536像素的屏幕的實際尺寸跟舊屏幕一11.2.6有限的系統(tǒng)512MB16GBiOS48KBiOS目前上市的iOS設(shè)備的物理內(nèi)存要么是512MB(iPhone4S、iPad2、一代iPadmini、iPodtouch5),要么是1024MB(iPhone5c、iPhone5S、iPadAir、iPadminiRetina),而且以后還會不斷加大。很大一部分內(nèi)存被用于屏幕緩沖區(qū)和可能會更少,尤其是現(xiàn)在其他的應(yīng)用可以在后臺運行了)iOS存時,卻還考慮另一個因素?,F(xiàn)代的計算機操作系統(tǒng)(比如OSX)會將未使用的用內(nèi)存時,它仍然可以正常運行。但是,iOS并不會將易失性內(nèi)存(數(shù)據(jù))iOS設(shè)備中未使CocoaTouch11.2.7不支持垃11.2.7不支持垃圾之前提過,CocoaTouch使用的是Objective-C,但是iOS卻并不支持一個Objective-C早在本世紀(jì)初就已經(jīng)有的關(guān)鍵特性:垃圾回收。是的,CocoaTouchiOS編寫程序時需要手動管理內(nèi)存,許多剛剛接觸這個平臺iOSObjective-CObjective-C對象占用內(nèi)存的問題。MacOSX10.8ARC就成為了針對ARC11.3,怒。因此,本書也以“Hello,World!Xcode創(chuàng)建一iOS11.3,怒。因此,本書也以“Hello,World!Xcode創(chuàng)建一iOS應(yīng)用,在模擬設(shè)備屏幕上顯示文本“HelloWorld!”。我們將討論使用XcodeiOSiOSiOS11.3.1Xcode中創(chuàng)建項XcodeiOSSDK()下載本書的項目歸檔文件。還可以順便看一下本書的論壇(/)。本書的論壇是討論iOS開發(fā)的好地02-HelloWorld前,需要啟動XcodeMacStoreXcodeXcodeMac/ApplicationsXcode如果你很熟悉以前版本的Xcode,但是還沒用過Xcode5,就會發(fā)現(xiàn)有很多變化(大多是變得比舊版更好了)Xcode2-1ShowthiswindowShowthiswindowwhenMaciPhoneiPadiPodtouch等設(shè)備,么第一次啟動Xcode時可能會看到一個對話框,詢問你是否要使用該設(shè)備進(jìn)行開發(fā)。就目前的學(xué)習(xí)來說,點擊Ignore(忽略)按鈕就可以了。否則就會顯示Organizer窗口即可。如果已經(jīng)加入了付費的iOS開發(fā)者計劃(iOSDeveloperProgram),iOS設(shè)備要創(chuàng)建新項目,可以選擇File?New?Project...(或者按下iOSOSXiOS用,所以選擇iOS部分的Application用,所以選擇iOS部分的Application(應(yīng)用)類別,以顯示iOS應(yīng)用模板。圖2-2右上方面板中的每一個圖標(biāo)都表示一個獨立的項目模板,這些模板可以用作構(gòu)iOSSingleViewApplication(單視圖應(yīng)用)iPhoneiPad應(yīng)用界面.SingleView圖標(biāo)(2-2示),然后單擊Next按鈕,就會看到項目選項表單,如圖2-3所示。在這個表ProductName(產(chǎn)品名稱)CompanyIdentifier(公司標(biāo)識)。Xcode會將這些內(nèi)容結(jié)合起來,為應(yīng)用生成一個唯一的BundleIdentifier(包標(biāo)識符)OrganizationName(組織名稱)Xcode會自動在你創(chuàng)建的每一個源代碼文件中以這個名稱插入版權(quán)聲明。把ProductName設(shè)置為HelloWorld,組織名稱為Apress,然后在CompanyIdentifier字段填寫com.apress,如圖2-3所示。等你注冊了開發(fā)者計劃并且了解授權(quán)文件(provisioningprofile)ClassPrefix(類名前綴),Xcode為我們創(chuàng)建的所有類的類名前面。這么做是為了避免與蘋果(使用兩個字符的前綴)ClassPrefix(類名前綴),Xcode為我們創(chuàng)建的所有類的類名前面。這么做是為了避免與蘋果(使用兩個字符的前綴)Objective-CBIDBIDBeginningiOSDevelopment如,可能有很多類會被命名為MyViewController,然而被命名為BIDMyViewController的類就很少了,這就大大降低了命名沖突的可能性。Devices(即設(shè)備類別)XcodeiPhoneiPodtouchiPad,或是能夠在所有iOS設(shè)備上運行的通用應(yīng)用。在設(shè)備類別中選擇iPhone(如果它還沒有被選的屏幕尺寸相同)iPhoneiPodtouch(iPadFinderXcodeCreateCreatelocalFinderXcodeCreateCreatelocalgitrepositoryforthisproject(倉庫)GitXcodeGitGit(SourceControlManagementSCM)XcodegitCreate11.3.2Xcode項目窗Xcode2-5iOSXcode2-5iOSXcode5Xcode3.xXcode4.x1.工具Xcode項目窗口的頂部區(qū)域是工具欄(2-6)(scheme)工具欄中間的大方框是活動視圖(activityview)工具欄中間的大方框是活動視圖(activityview)輔助編輯器(assistanteditor)文件。可以手動指定每個面板的內(nèi)容,也可以讓Xcode自動判斷進(jìn)而顯示與Objective-C類的實現(xiàn)文件(.m文件),Xcode就會自動在右側(cè)面板中顯示這個類的頭文件(.h文件)Xcode版本編輯器(versioneditor)Time類似的對比視圖,這個對比視圖可以跟Subversion和git等版本控制系統(tǒng)協(xié)同工2.導(dǎo)航2.導(dǎo)航導(dǎo)航視圖開關(guān)把它隱藏的話,請再次將其顯示出來。導(dǎo)航視圖共提供了8個面項目導(dǎo)航面板(projectnavigator):這個面板列出了項目用到的所有文件,如圖2-7所示。可以把任何想要的內(nèi)容引用放在這里,從源代碼文件到圖片文件、數(shù)據(jù)模型、屬性列表文件(plist文件,2.1.2節(jié)會介紹),甚至是其以編輯(Xcode知道如何編輯這種文件)符號導(dǎo)航面板(symbol符號導(dǎo)航面板(symbolnavigator):工作區(qū)中定義的符號(symbol)2-8所示。從根本上說,符號就是那些編Objective-C搜索導(dǎo)航面板(Findnavigator搜索導(dǎo)航面板(Findnavigator):使用這個導(dǎo)航面板可以對工作區(qū)中的所有文件執(zhí)行搜索,如圖2-9所示。面板頂部有多層下拉菜單,F(xiàn)ind(查詢)功能也Replace(替換)功能,此外還可以對輸入的文本采用不同的搜索方式。測試導(dǎo)航面板(Testnavigator):測試導(dǎo)航面板(Testnavigator):Xcode果(2-11所示)調(diào)試導(dǎo)航面板(debugnavigator)2-12Xcode5UserGuide文檔的(stackframe)(stackframe)面板(breakpointnavigator):可以在斷點導(dǎo)航面板中查看已設(shè)置的所有斷點,如圖2-13所示。顧名思義,斷點會指向?qū)е聭?yīng)用停止運行(或者跳出)的代碼部11.3.3Xcode跳轉(zhuǎn)在編輯器的頂部,你會找到一個叫作跳轉(zhuǎn)欄2-15可顯示的子菜單包括最近的文件(RecentFiles)、未保存的文件(UnsavedFiles)、關(guān)聯(lián)文件(Counterparts)、父類(Superclasses可顯示的子菜單包括最近的文件(RecentFiles)、未保存的文件(UnsavedFiles)、關(guān)聯(lián)文件(Counterparts)、父類(Superclasses)、子類(Subclasses)、兄弟類(Siblings)、類別(Categories)2-15BIDAppDelegate.m,Xcode511.3.4實用工具Xcode11.3.5界面構(gòu)Xcode的早期版本包含一個被稱為界面構(gòu)建器(11.3.5界面構(gòu)Xcode的早期版本包含一個被稱為界面構(gòu)建器(InterfaceBuilder)的界面設(shè)XcodeXcode11.3.6Xcode4(compiler)和底層調(diào)試器(low-leveldebugger)過去幾年蘋果一直使用GCC(GNUCCompiler)作為底層編譯器。不過最近LLVM(LowLevelVirtualMachine,底層虛擬機)LLVMGCC快。除了代碼生成速度快之外,LLVM還知道更多與代碼相關(guān)的信息,所以它能生成更智能、更精確的錯誤信息和警告。Xcode對LLVM也有很好的集成,后者為前者注入了強大的能量。Xcode名稱拼寫錯誤、括號匹配錯誤、分號遺漏等問題。此外,LLVM還提供了一個復(fù)雜的靜態(tài)分析器(staticanalyzer),它可以掃描你的代碼以查找各種潛在問題,Objective-CLLVM11.3.7深入研究XcodeHelloWorld8個導(dǎo)航面板圖標(biāo)(位于工作區(qū)左側(cè))中最左邊的那個圖標(biāo)(command+1command+88command+1command+88command+1面板,command+2對應(yīng)符號導(dǎo)航面板,以此類推,command+8對應(yīng)日志導(dǎo)航面板。項目導(dǎo)航面板中的第一個條目就是項目名,本例為HelloWorld。這個條目表示整個項目,可以做些與項目相關(guān)的配置。單擊這個條目,就可以在Xcode的編2-7HelloWorld下一些子文件夾(Xcode中稱為組)SupportingFiles:HelloWorld文件夾內(nèi)的某個文件夾,包含了項目中必需的Objective-CSupportingFiles文件夾上花費太多時間。創(chuàng)建一個新的iPhone應(yīng)用項目后,這個文件夾就會包含4個HelloWorld-Info.plist:這個文件包含應(yīng)用的件。事實上,最好不要碰這個文件,除非你真的知道自己在做什么。代表precompiledheader,意思是預(yù)編譯頭文件)。通常,這個文件中包含的頭Xcode代表precompiledheader,意思是預(yù)編譯頭文件)。通常,這個文件中包含的頭Xcode間(BuildRun可以對項目進(jìn)行編譯)XcodeHelloWorld文SupportingFiles文件夾,里面是構(gòu)建并運行單元測FrameworksFrameworks7Products:這個文件夾包含構(gòu)建項目時生成的應(yīng)用。展開Products文件夾,HelloWorld.app的文件,這就是這個項目創(chuàng)建出來的應(yīng)用。它HelloWorldTests.xctest的文件,它表示測試代碼。這些文件都被稱為構(gòu)建目(buildtarget)。由于我們還沒有構(gòu)建這個應(yīng)用,所以它們都顯Xcode注意:導(dǎo)航面板區(qū)域中的“文件夾”并不一定與Mac文件系統(tǒng)上的文件夾一一對應(yīng)。它們只是Xcode中的邏輯分組,用于對所有的東西進(jìn)行組織,以便在應(yīng)至可以把它們放到項目文件夾外部。XcodeXcodeClassesXcodeClasses11.3.8界面構(gòu)建器在項目窗口的項目導(dǎo)航面板中展開HelloWorld組(如果尚未展開),然后選擇Main.storyboard文件。然后這個文件就會在編輯器面板中打開(參見圖2-16)iPhone屏幕,可以在這個背景上編輯界面。這就是Xcode的界面構(gòu)建器(有時被稱為IB),可以在這里設(shè)計應(yīng)用的用戶界面。界面構(gòu)建器歷史悠久,它于1988年面世,曾用于開發(fā)NeXTSTEP、OpenStep、MacOSX應(yīng)用,現(xiàn)在也用于iPhone和iPad等iOS設(shè)備。之前已經(jīng)提到過,界面構(gòu)建器過去是一個獨立的應(yīng)用(Xcode時會自動安裝界面構(gòu)建器),XcodeXcode文件文件格界面構(gòu)建器支持不同的文件類型:最初的版本使用擴展名為nib的二進(jìn)制格xibXML的衍生格式。兩者包含了完全一樣的文檔內(nèi)容,但xib格式的版本卻是基于文本格式的,這樣做有很多優(yōu)勢,尤其是在你使用版本控制系統(tǒng)的時候。注意iOS項目模板全都默認(rèn)使用.xib擴展名,但是在最初的20年里,所有的界面構(gòu)建器文件都使用.nib擴展名,結(jié)果就是大部分開發(fā)者都把界面構(gòu)建器文件稱為“nib文件”。不管文件實際使用的是.xib擴展名還是.nib擴展名,都被稱為“nib文件”。事實上,蘋果公司仍然在其文檔中使用“nib”和“nib文件”這兩個術(shù)語。一個nib文件可以包含任意數(shù)量的對象。但iOSnib文件負(fù)責(zé)包含一個視圖(一般都是全屏視圖)以及nibiOS最近幾年,界面構(gòu)建器開始支持另一種文件類型,即分鏡(storyboard)將分鏡想像成一個“nib文件”(meta-nibfile),nib將分鏡想像成一個“nib文件”(meta-nibfile),nib文件不同,分鏡不會一次加載所有的內(nèi)容,而是在你需要加載某視圖和控nib文件我們都會使用到。在當(dāng)前的示例中,Xcode為我們創(chuàng)建了一個分鏡,所以我們先來看看它的用法。iOS一樣。Main.storyboard文件會在應(yīng)用啟動時自動進(jìn)行加載(nibiPhone屏幕尺寸(雖然也可能是其他尺寸)ViewController(視圖控制器)FirstResponder(第一響應(yīng)者)。目前請先忽略掉FirstResponder示分鏡的所有內(nèi)容,并由相關(guān)的場景(scene)作為容器來進(jìn)行劃分。在本示例中只有一個場景,它的名稱是ViewControllerScene。你會看到它包含了一個名稱為View示分鏡的所有內(nèi)容,并由相關(guān)的場景(scene)作為容器來進(jìn)行劃分。在本示例中只有一個場景,它的名稱是ViewControllerScene。你會看到它包含了一個名稱為ViewControllerView的子項(還有其他一ViewUIViewUIView戶界面元素(包括按鈕、文本框、標(biāo)簽等)都繼承自UIView。但是,本書使用的術(shù)語視圖(view)UIViewView圖標(biāo),Xcode會自動對我們之前所說的iPhone尺寸屏幕的矩形進(jìn)行高亮。在這2-17所示。如果沒有看到這個實用工具視圖,可以單擊工具欄上三個View按鈕中最右邊的那個,選擇View?Utilities?ShowUtilities,或者按下option+command+0實用工具視圖的下半部分稱為庫面板(librarypane),或者簡稱為庫。庫是可重用對象的集合,可以在自己的程序中使用它們。庫面板頂部工具欄中的4實用工具視圖的下半部分稱為庫面板(librarypane),或者簡稱為庫。庫是可重用對象的集合,可以在自己的程序中使用它們。庫面板頂部工具欄中的44文件模板庫(filetemplatelibrary):這部分包含一些文件模板,向項目中添加Objective-C類,就可以從文件模板庫中拖出一個Objective-C類文件。代碼片段庫(codesnippetlibrary):這部分包含一些精選的代碼片段,可以直O(jiān)bjective-C的快速枚舉語法?沒關(guān)系,就從iOS界面的任何對象。本書的示例程序會大量使用對象注意對象庫中的對象主要來自于iOS的UIKit框架,這個框架中包含的對象可UIKit注意對象庫中的對象主要來自于iOS的UIKit框架,這個框架中包含的對象可UIKitCocoaTouchAppKitCocoa在很多明顯的不同。不過,NSStringNSArray等屬于Foundation框架的類,是Cocoa和CocoaTouch共有的。注意庫面板底部的搜索框。想找一個按鈕控件?那就在搜索框里輸入button,這時庫會只顯示名字中含有“button”的項。搜索現(xiàn)在試著使用界面構(gòu)建器。單擊庫頂部的對象庫圖標(biāo)(看起來像個立方體)TableViewcontrol+option+command+3在庫中找到Label。它大約位于列表的頂部。然后,把標(biāo)簽控件拖放到之前介紹過的視圖中。(dock中單擊一下View圖標(biāo)。)當(dāng)把光標(biāo)移到視圖上面時,光標(biāo)就會變成一個綠色的加號指示符(Finder中它表示“我正在復(fù)制某些內(nèi)容”)2-18正在編輯的視圖中,就能將其作為子視圖添加到主視圖(View的視圖)LabelUILabel簽,鍵入文本LabelUILabel簽,鍵入文本,File?Save(command+S)iOSiOS選項。在它下面有一整段標(biāo)題為iOSSimulator的列表,里面列出了你可以在iOS模擬器中使用的所有型號的設(shè)備。選擇iPhoneRetina(4inch),這樣我們的應(yīng)iPhone5的配置運行了。如果參與了蘋果公司的付費iOSiPhoneProduct?Run(command+R)2-19Product?Run(command+R)2-19Mac與上面講的有所不同??偠灾绻胍趇PhoneiPadiPodtouch上構(gòu)建并運行應(yīng)用,就必須注冊蘋果公司的iOS開發(fā)者計劃并支付一些費用,然后Xcode做一些恰當(dāng)?shù)呐渲?。加入開發(fā)者計劃后,蘋果公司會提供一些必要iPhoneiPad返回Xcode了。Xcode和模擬器是兩個互相獨立的應(yīng)用。提示檢查完應(yīng)用后,XcodeXcode屬性修XcodeHelloWorldXcodeHelloWorld2-option+command+1option+command+2RunObjective-CObjective-C對象(與在代碼中所做的一樣),11.4實現(xiàn)基本HelloWorld11.4實現(xiàn)基本HelloWorldCocoaTouch3-1所示。用戶按下一個按鈕時,標(biāo)簽上的文本會相應(yīng)地改變。這看上去是一個相當(dāng)簡單的示例,但它展示了在iOSCocoaTouchGUI元素使用帶樣式的文本styledtext)11.4.1MVC在深入學(xué)習(xí)之前,先介紹一些基本理論。CocoaTouch設(shè)計者們采用MVC模式(Model-View-Controller)作為指導(dǎo)原則。在基于圖形用MVC可以非常合乎邏輯地對代碼進(jìn)行拆分。目前,幾乎所有面向?qū)ο缶幊炭蚣芏荚谝欢ǔ潭壬辖梃b了MVC的設(shè)計理念,但很少有像CocoaTouchMVCMVC3MVC3MVC3MVC3CocoaTouch(甚至創(chuàng)建)Objective-C序數(shù)據(jù),也可以使用CoreData構(gòu)建一個數(shù)據(jù)模型。本章的應(yīng)用程序不會創(chuàng)建任義的類(NSObject子類),UIKit控制器類(UIViewController,稍后就會介紹)的子類。這么說吧,通過繼承CocoaTouchUIKitMVC原則的情況。在開發(fā)時牢記這個概念,就能夠創(chuàng)建出簡潔而易于維護的代11.4.2創(chuàng)建現(xiàn)在開始創(chuàng)建下一個Xcode項目。這個項目與上一章的項目使用相同的模板SingleViewApplication。從這個簡單的模板入手,更容易理解視圖和控制器之間的Xcode現(xiàn)在開始創(chuàng)建下一個Xcode項目。這個項目與上一章的項目使用相同的模板SingleViewApplication。從這個簡單的模板入手,更容易理解視圖和控制器之間的XcodeFile?New?NewProject...(shift+command+N)SingleViewApplicationNextProductNameButtonFunOrganizationNameIdentifierClassPrefix這三個字段的值默認(rèn)與上一個項目相同(Apress、,DevicesiPhoneiPhone3-2點擊Next,XcodeCreategitrepository選項,可以根據(jù)自己的喜好來決11.4.3視圖控是用戶界面)XcodeButton是用戶界面)XcodeButtonFun分組應(yīng)該已經(jīng)展開了(3-3所示。Button4個源代碼文件(以.h或者.m結(jié)尾)storyboard文件和一個包xcassets4個源代碼文件實現(xiàn)了應(yīng)用程序所需的兩個類:應(yīng)用程序委托(applicationdelegate),以及用于這個應(yīng)用僅有的一個視圖的視圖控制器。再次提醒一下,Xcode為所有的類都自動添加了之前指定的類名前綴(BID)XcodeBIDViewControllerBIDViewController部分則表明這個類是一個視圖控制器。點擊分組和文件(Groups&Files)面板中的BIDViewControllerUIViewControllerUIViewControllerUIKitXcode 輸出接口和操作方2Xcode 輸出接口和操作方2Xcode(outlet)nib了。本章會詳細(xì)介紹這個方法。另一方面,可以對nib文件中的界面對象進(jìn)行設(shè)置,以觸發(fā)控制器類中的某些特殊方法。這些特殊方法稱為操作方法(actionmethod),或者簡稱為操作(action)。例如,可以在界面構(gòu)建器中進(jìn)行設(shè)置,Xcode定好,然后再使用界面構(gòu)建器與將它們與相應(yīng)的代碼關(guān)聯(lián)起來。Xcode的輔助視iOS輸出接Objective-CIBOutlet(classextension)這個例子聲明了一個名為myButton的輸出接口,可以讓它指向界面構(gòu)建器中的任何按鈕。IBOutletObjective-C(classextension)這個例子聲明了一個名為myButton的輸出接口,可以讓它指向界面構(gòu)建器中的任何按鈕。IBOutletObjective-C內(nèi)置的關(guān)鍵字,僅僅是一個簡單的C是不是感到很困惑?對于編譯器來說,IBOutlet什么作用都沒有。它唯一的Xcodenibnib文件中的對象進(jìn)行關(guān)聯(lián)的屬性,都必須使用IBOutlet關(guān)鍵字進(jìn)行聲明。幸好,Xcode能夠自動創(chuàng)建輸出接口。隨著時間的推移,蘋果公司改變了輸出接口的聲明1關(guān)鍵字在CocoaNeXTSTEP2IBOutlet書中的代碼,把IBOutletGCCLLVM書中的代碼,把IBOutletGCCLLVM(LowLevelVirtualMachine,LLVMIBOutlet關(guān)鍵字放在屬性聲明中,所以我們遵循這一方式。希望你能了解這些歷史背景,以防遇到比較老的代碼(IBOutlet關(guān)鍵字出現(xiàn)在實例變量的聲明中)而迷惑不解。要了解Objective-C屬性的更多信息,可以閱讀由ScottKnasterWaqarMalikMarkDalrympleObjective-C基礎(chǔ)教程(2IntroductiontotheObjective-CProgrammingLanguage”(/2.操作IBAction的特殊方法,返回類型nib文件中的控件觸發(fā)。操作方法的聲明通常如IBActionvoid。返回類型為void的方法不返回任何值。而且,操作方法要么不接受任何參數(shù),要么只接受一個參數(shù)(sender)。sendersender指向觸發(fā)該方法的對象。例如,如sender指向觸發(fā)該方法的對象。例如,如果用戶按下某個按鈕時觸發(fā)了這個操作法,那么sendersender Cocoa和senderiOS代碼(尤其在項目導(dǎo)航面板中單擊BIDViewController.m,打開這個實現(xiàn)文件。可以看viewDidLoaddidReceiveMemoryWarning等方法的樣板代碼,這是由創(chuàng)建項目時選擇的項目模板提供的。在UIViewController的子類中Xcode提供了這些基本的代碼片段,如果需要的話,Objective-C分類(category)聲明,可以在其中聲明方法和屬性,但是這些方法implementation塊中使用。本書后面會用到類擴展,但是現(xiàn)在并不需要,所以應(yīng)該把這個空的@interface.@end塊刪除。完成之后,實Main.storyboard的界面構(gòu)建器中打開應(yīng)用程序的視圖(3-4Main.storyboard的界面構(gòu)建器中打開應(yīng)用程序的視圖(3-4)。你可能還記得上一章提到,3-1參數(shù)(之前的“操作方法”一節(jié)討論過)來區(qū)分這兩個按鈕。除了操作方Xcode1.添加按鈕和操作1.添加按鈕和操作方Xcodecontrol+option+command+3)打開對象庫。在對象庫的搜索框中輸入UIButton(4UIBuUIButton了),3-5把3-1引導(dǎo)線可以幫助你遵循iOSHumanInterfaceGuidelines(通常簡稱為HIG)。蘋果的3-1引導(dǎo)線可以幫助你遵循iOSHumanInterfaceGuidelines(通常簡稱為HIG)。蘋果的HIG可以幫助用戶更好地設(shè)計iPhone和iPad應(yīng)用程序。HIG會告訴你應(yīng)該包含了很多有用的信息,這是每個iOS開發(fā)者都應(yīng)該了解的。可以在以下地址找雙擊新添加的按鈕,可以編輯按鈕標(biāo)題,將其標(biāo)題設(shè)為Left?,F(xiàn)在該Xcode發(fā)揮作用了。選擇View?AssistantEditor?ShowAssistantEditor(或者按下option+command+return)7個按鈕,可以點擊最左邊一組按鈕中間的按鈕,顯示或者隱藏輔助編輯器(3-6)輔助編輯器會出現(xiàn)在編輯面板的右側(cè),除非你特別指定輔助編輯器的位置(BIDViewController.h如果你的顯示器屏幕比較小(MacBookAir上的顯示器),utility視圖或項目導(dǎo)航面板,從而獲得足夠的空間,有效地使用輔助編輯器??梢酝ㄟ^項目導(dǎo)航窗口右上角的3個視圖按鈕方便地完成這個操作(參見圖3-6)。ViewControllerXcodeViewControllerXcodeBIDViewControllerUIViewControllerXcode在上面的跳轉(zhuǎn)欄中選擇BIDViewController.h文件。首先,點擊新添加的按鈕以選control鍵不放開,接著用鼠標(biāo)把按鈕拖向輔助編輯器編輯器中的頭文件、File’sOwner圖標(biāo)、編輯面板左側(cè)的任何其他圖標(biāo),甚至是編輯區(qū)域中的其他對象。如果把指針移動到@interface和@end關(guān)鍵字之間(參見圖3-7),就會彈出一個灰色的提示框,告訴你如果在這里放開鼠標(biāo)的話可以插入編輯器中的頭文件、File’sOwner圖標(biāo)、編輯面板左側(cè)的任何其他圖標(biāo),甚至是編輯區(qū)域中的其他對象。如果把指針移動到@interface和@end關(guān)鍵字之間(參見圖3-7),就會彈出一個灰色的提示框,告訴你如果在這里放開鼠標(biāo)的話可以插入NSArray3-8ConnectionOutletActionXcode,我們要創(chuàng)建的是一個操3-9NamereturnreturnTabTypeUIButtonididObjective-CTypeididObjective-CTypeidid即可。在本例中,我們只會通過按鈕對象調(diào)用這個方法,所以應(yīng)該將其改為UIButtonXcode和LLVM知道我們的意圖?,F(xiàn)Type下面還有兩個字段,保留它們的默認(rèn)值即可。在Event字段中指定什么時候調(diào)用這個方法。默認(rèn)值TouchUpInside僅會在用戶的手指離開屏幕(且用戶的手指在離開屏Argumentssenderreturn就是XcodeBIDViewController.hBIDViewController.mXcodeXcodeBIDViewController.mXcodeXcodeMain.storyboard標(biāo)題改為助編輯器。無所謂是當(dāng)前是.h文件還是.mbuttonPressed:buttonPressed:ConnectAction的灰色提示框(3-10)。XcodebuttonPressed:方法。再說一遍,如果用這種方式把按鈕拖曳到實現(xiàn)文件(.m文件)中的操作方法,效果也是一樣的。也就是說,按住control鍵拖曳按鈕時,BIDViewController.hbuttonPressed方法聲明上,也可以拖向BIDViewController.m文件中的buttonPressed方法實現(xiàn)上。Xcode真是太智能2.添加標(biāo)簽和輸2.添加標(biāo)簽和輸出接LabelLabel(11)。把Label拖曳到用戶界面中,放置在兩個按鈕的上方。然后,調(diào)整標(biāo)簽的標(biāo)簽中的文本默認(rèn)是左對齊的,但是我們希望它居中對齊。選擇View?UtilitiesShowAttributesInspector(option+command+4)打開屬性檢查器(3-12)Alignment中了標(biāo)簽的文本),deletereturn鍵提交更改。這樣一來,標(biāo)簽在未選中時就看不到了,不過不用擔(dān)心,BIDViewController.hBIDViewController.hcontrol3-13你將再次看到圖3-8所示的彈出窗口。我們要創(chuàng)建一個輸出接口,所以保留ConnectionOutlet。并且要為這個輸出接口指定一個描述性的名稱,以便在編寫代碼時能夠知道這個輸出接口的作用。在Na

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論