[Swift-d20] - Basic - 捨棄 Storyboard 使用純程式碼 的方式撰寫 ViewController
2014-10-20 00:00
1 minute read

今天專案的 Github link

其實哦

寫 Swift 也有幾個禮拜了

我一直覺得使用 Interface Builder 的確很方便

但是在程式面與視覺面之間的溝通常常會漏東漏西的

比方說如果要設定 reusable identifier 時

除了程式裡面的字串要設定以外,還要再到 storyboard 裡設定同樣的字串

一個簡單的小程式可能不超過 20 個 View 的情況下

還可以這樣做,當程式長得非常大的時候,好像就很難注意到這件事,

而且 View 太多 storyboard 就會開始變慢….

因此今天要來試著在 Swift 中

如何不用 Storyboard,來打造我們的程式

(當然 xib/nib 還是會用到,只是我們單純捨棄 storyboard,用程式來控制流程)

首先,一樣先建立一個測試專案

接著我們要動到的程式碼是 AppDelegate.swift:

編輯它:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var viewController: ViewController?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.

        self.viewController = ViewController()
        self.viewController?.view.backgroundColor = UIColor.redColor()
        
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.backgroundColor = UIColor.whiteColor()
        
        self.window?.rootViewController = viewController
        self.window?.makeKeyAndVisible()
        
        return true
    }

其實這段程式碼,就是在做 storyboard 的 “進入點” 這件事

var viewController: ViewController?

我們用專案建立時產生的 ViewController 建立了一個物件

並在 application launch 的時候,將該 ViewController 建立起來,設定他的背景顏色為紅色

self.viewController = ViewController()
self.viewController?.view.backgroundColor = UIColor.redColor()

另外對 window 做一些設定

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.backgroundColor = UIColor.whiteColor()

設定他 Screen 大小 (根據手機解析度而定) 並設定 window 的背景顏色為白色

接著是最重要的設定:

self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()

我們要讓 viewController 指定為是這個 window 的 rootViewController

並且 makeKeyAndVisible

這樣就完成手動設定進入點的程式了

再來我們就可以大膽一點,把 Storyboard 砍掉啦!

接著執行程式,就可以看到一片紅色了!!!

image

是不是很簡單!

如果要 NavigationController 也可以直接設定!

接下來的實戰開發專案就會以不使用 Storyboard 的方式開發

增加程式碼可讀性 :P

老是貼圖也很累 XDDDD

接下來就要用 Swift 寫一個 TODOList APP 囉!

並且實際接上隔壁棚的 Restful API XD


Back to posts


comments powered by Disqus