如何通過通過純粹的程式碼,而不依賴於Xcode的StoryBoard,來完成一個App?
首先做些操作性的工作,具體過程是這樣的:
- 開啟xcode
- 建立一個Single View App
Xcode會進入主要編輯介面。此時,我們開啟AppDelegate.swift檔案然後覆蓋原始碼為如下:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window : UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow()
window!.rootViewController = UIViewController()
window!.rootViewController!.view.backgroundColor = .blue
window!.makeKeyAndVisible()
return true
}
}複製程式碼
執行後發現手機(或者模擬器)滿屏的藍色背景就說明成功了。
一起來看看程式碼。
我們需要匯入UIKit:
import UIKit複製程式碼
框架UIKit用來構造和管理使用者介面、響應使用者互動和系統事件。既然需要建立App,引入UIKit是第一件需要做的工作。
接著檢視AppDelegate類。它實現協議UIApplicationDelegate,且必須被標記為@UIApplicationMain,兩者配合就設定了App的程式入口點。AppDelegate實現了此協議中規定的函式:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 複製程式碼
這樣,UIKit就會在完成App啟動呼叫此函式,從而App可以再次實現自己的初始化邏輯。
在本案例中,我們在啟動函式中建立了window例項,它是UIWindow的例項。程式碼隨即把window屬性的rootViewController設定為UIViewController的例項。
為了視覺化的看到我們的工作成果,我們設定UIViewController的背景色為藍色,設定的方式就是把屬性view背景色設定為藍色,此屬性是類UIView的例項。
這樣,我們完成了最基本的一個UI介面。
window和view是構建UI的關鍵構造塊,因此有必要澄清下概念。
每個應用都有一個window,這個window並沒有任何外觀形象,每個view都是被window包含在內的,事件處理也是首先路由到相應的window物件然後被導向到對應的檢視。
View定義了一個螢幕上的矩形區域,並且管理此區域的內容和使用者互動。window通過一個rootViewController的屬性view開始關聯,然後在此view內可以通過addSubView加入更多的子檢視來完成UI的構建。
隨後我們會接觸更多的view型別,實際上按鈕(UIButton)、標籤(UILabel)等可以看到和互動的控制元件都是檢視的子類,View的使用時非常廣泛的。
可能很多人會覺得AppDelegate這個名字過於冗長。為此我們得了解一個叫做Delegate的設計模式。Delegate是一個簡單而強大的設計模式,可以讓其中一個物件委託一部分功能給另外一個物件。做法就是發起物件持有委託物件的例項,並在適當的時間發起訊息給委託物件,告訴委託物件將要發生的事件或者已經發生的事件。委託物件可以更新使用者介面或者更新自己的狀態作為響應。
在此案例中,關於委託牽涉到了兩個類包括UIApplication、AppDelegate,以及一個協議為UIApplicationDelegate,UIApplication委託事件給AppDelegate,這裡的委託事件就是:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool複製程式碼
以便讓在UIApplicationDelegate的物件可以完成自己的初始化程式碼。UIApplication和UIApplicationDelegate之間可以建立一個協議,此協議規定兩者之間可以委託的具體內容,此協議就是UIApplicationDelegate規定的,可以通過手冊瞭解此協議的更多資料。
這樣,我們瞭解到了建造一個App涉及到的最少的類:UIApplication、UIApplicationDelegate、UIWindow、UIViewController,以及UIKit大量使用的委託設計模式,未來的文字將會以此為墊腳石。