[iOS Tutorial] 3 用喝咖啡的時間拉出一個 App

八月 17, 2012  Comments by

為了讓學習不中斷,在深入探討 Objective-C 之前,我們用最少的步驟實作一個什麼功能都沒有的 web browser。只花你不到一杯咖啡的時間,下載 Xcode 的時間說不定還比較久。

從第一次執行 Xcode 開始,只要還看得懂幾個英文單字,建立一個新的 Xcode project 不算太難 (Create a new Xcode project)

這個範例我們採用 Single View Application template,這個 template 幫你建立了一個空白畫面的 App,絕大部分的專案都是從此開始。

為這個 project 命名為 browser 之後,有兩個重點選項:

  1. Use Storyboards – Storyboard 是 iOS 5 所提供的新機制,界面除了可以透過拉元件的方式產生目前的執行畫面之外,還可以更進一步指示下一個畫面為何者。例如相簿 App 顯示所有相片的畫面,點選某張畫面後,指示下一個畫面為單張全螢幕畫面。
  2. Use Automatic Reference Counting (ARC) – Objective-C 有一套很複雜的記憶體管理規則,開啟 ARC 功能之後,不再需要應付那些煩人的細節。

建立好專案之後,到左側點選 MainStoryboard.storyboard 檔案,開啟如上的畫面,然後從右下角的地方找到 Web View,然後滑鼠左鍵按住 Web View 不放,慢慢的把他拖到畫面的正中央,如下兩圖,這時候已經成功一半了。

到這一步之前,我們只是賦與這個 App 軀體而已,尚未賦與他靈魂,也就是說我們給了 App 所需要顯示的畫面,但是沒有給他內容。甚至於這中間的關聯性我們都還沒有建立起來。再重新檢視 MVC,我們已經完成了 View,接下來我們要完成 Controller (這個範例沒用到 Model)。

畫面左側的 ViewController.h/.m 就是我們 MVC 中的 Controller,為了讓整個畫面更易於操作,我們顯示 Assistant Editor 並且隱藏右側的 Utilities。如此一來,就可以在同一個畫面同時顯示 MainStoryboard.storyboard 跟 ViewController.h。

同時顯示這兩個檔案的目的,就是為了將剛才拉出來的 Web View 可以讓 ViewController 存取。請按住鍵盤上的 control + 滑鼠左鍵點著 Web View,接著拉到 ViewController.h 後放開。就會自動產生一個 IBOutlet 的 property。

這裡我們看到幾個關鍵字:

  • IBOutlet – IBOutlet 的存在只是為了讓 Xcode 知道來源是 Storyboard,以利 Xcode 管理界面與程式碼間的關係。
  • weak – 代表 myWebView 這個 object 從 heap 消失後,Xcode 會幫你將 myWebView 設定為 nil (暫時想成 C 的 null 即可),另一個 keyword 是 strong,在往後提及 property 的章節時會再次說明。
  • nonatomic – getter 與 setter 不處理同步問題,非 multithread 的環境下,直接設定為 nonatomic 即可。

最後一個步驟,為 myWebView 設定預設首頁。只有3行,簡單解釋一下其原理。

  • NSURL *url = [NSURL URLWithString:@"http://www.google.com"];  // @"" 為 Objective-C 表示字串的方式,此字串同時也是 NSString。NSURL 則是用來描述 URL
  • NSURLRequest *request = [NSURLRequest requestWithURL:url];// NSURLRequest 用來定義所要送出的 http request 內容,這裡我們只設定網址
  • [self.myWebView loadRequest:request];// 用 self 指標取得 myWebView 的 getter method 後,再送一道 loadRequest: 的 message 告訴 UIWebView 我們要顯示的網頁在哪裡

全部完成後,點選左上角的 run (熱鍵:cmd + R) 執行他,我們不但完成了一個什麼功能都沒有的 browser 之外,還可以用 google 的手寫搜尋 (大誤)。browser 範例程式

iOS 入門教學

About the author

喜愛攝影、自助旅行、一邊宅在家帶小孩一邊創業的 App 設計師。