Xcode 開啟 Navigation - Based App:2010年05月29a日星期六
iPhone SDK開發範例大全即iPhone Developer's CookBook的中文譯本,程式可由erica網站下載。第五章講基本表格,程式共有十個。看完了第一個程式---01a-Base Table,會好奇該程式是如何開始的?
本程式即是用Xcode 開啟 Navigation - Based App(見圖一),再將一個程式---01a-Base Table匯入以練習基本Table View,執行結果與01a-Base Table同,如圖二,程式列於圖三,原程式為OS2.0版,在OS3.0時,cell.text己無法使用了,故將第38行改為39行。程式解說如下:
本程式(圖三)有三大部份,一為第11行、第16行的RootViewController(是個UITableViewController),一為第207、218行的jTableAppDelegate,一為第253行的main。第24行、第115行、第205行、第223行、第241行、第252行#pragma的用法點此處。
第253行的main:其作用只是程式的entry point。在104行,由jTableampleAppDelegate跳入主程式jTableAppDelegate(第218行)。
第207行、218行的SampleAppDelegate:其作用是有個applicationDidFinishLaunching(第225行)為entry point,main一完就自動跳入此處。在其中產生一個window(第229行),產生一個是Navaigation的view(第230行 UINavigationView Controller),並將RootViewController設為其Controller,由此跳入RootViewController,在第231行將NavigationView Controller這個UIView加入window subview(此時成為RootViewController view)。
除了applicationDidFinishLaunching(第225行)外,另有:
applicationWill Terminate(237行):這是在結束之前會跳進來。
第16行的RootViewController:共分四部份,分別是第18行的init、第24行的Regular methods、第 79 行的Table View Methods( UITableViewDataSource Methods)、第115行的UITableViewDelegateMethods。
第18行的init:在jTableAppDelegate第230行[[RootViewController alloc] init]時,init一個RootViewContoller成為jTableAppDelegate的controller。
第24行的Regular methods包含一般Navigation - Based App所需的methods:
viewDidLoad(27行)、viewWillAppear(36行)、viewDidAppear(42行)、viewWillDisappear(48行)、viewDidDisappear(53行)、shouldAutorotateToInterfaceOrientation(60行)、didReceivedMemoryWarning(66行)、viewDidUnload(73行)。
這些Regular methods讓程式設計師能有很多機會做"填空題",填入需要的功能。
第 79 Table View Methods,即為UITableViewDataSource Methods:table view需要Data Source,也就是顯示在table裡的資訊,需要有一個來源,UITableViewDataSource Methods就是提供資訊來源的一組methods。
- 第81行的numberOfSectionsInTableView:1(第82行)。
- 第87行的numberOfRowsInSection:有UIFont family這麼多伺Rows。[[UIFont familyNames] count] (第89行) 。
- 第94行cellForRowAtIndexPath:在第111行將[UIFont familyNames]放入cell。105~106行是找一塊memory給cell的標準用法,如果不這樣做也可用95~100行的方式,這是Xcode 開啟 Navigation - Based App原本程式。
第115行的UITableViewDelegateMethods:jTableAppDelegate結束,立刻執行的是RootViewController裡的loadView(第130行),執行完,就開始執行第24行的Regular methods(或UITableViewDataSource Methods),接著就進入loop等待,若有人點了某個cell就進入didSelectRowAtIndexPath(第118行)。現將Xcode 開啟 Navigation - Based App所提供的標準UITableViewDelegateMethods整理如下(綜合146~199行):
didSelectRowAtIndexPath (第118行)、loadView(第130行)、canEditRowAtIndexPath (第159行)、commitEditingStyle (第168行)、moveRowAtIndexPath (第183行)、canMoveRowAtIndexPath (第190行)、dealloc (第197行)。
同理,這些UITableViewDelegateMethods讓程式設計師能有很多機會做"填空題",填入需要的功能。
圖一:用Xcode 開啟 Navigation - Based App