國(guó)內(nèi)做 iOS 開(kāi)發(fā)的開(kāi)發(fā)者很多,但是 OS X 開(kāi)發(fā)者數(shù)量卻遠(yuǎn)遠(yuǎn)不及。與此同時(shí),有關(guān) OS X 開(kāi)發(fā)的文章和參考資料也十分少,自學(xué)起來(lái)比較困難,所以我決定在這個(gè)文集中記錄一些 OS X 開(kāi)發(fā)的點(diǎn)滴。
第一篇我們來(lái)點(diǎn)簡(jiǎn)單的。
建立項(xiàng)目
首先啟動(dòng) Xcode,選擇新建項(xiàng)目,項(xiàng)目模板當(dāng)然就是 OS X Application 啦
下面是選擇使用的語(yǔ)言和一些技術(shù),我這里比較推薦大家選擇 Swift 語(yǔ)言,當(dāng)然你也可以使用你熟悉 Objective-C,然后勾選 Use Storyboards 選項(xiàng),因?yàn)槭褂? Storyboard 可以極大地提高你的開(kāi)發(fā)效率。
What's in Storyboard
打開(kāi) Main.storyboard
文件,我們看看里面有什么內(nèi)容。
OMG,感覺(jué)好復(fù)雜,有三個(gè)視覺(jué)元素:主菜單、窗口、視圖。這些分別都是什么鬼?
我們知道每個(gè) OS X 應(yīng)用都有一個(gè)單獨(dú)的菜單,那么最上面的菜單就是整個(gè)應(yīng)用顯示在狀態(tài)欄上的主菜單。
接下來(lái)是窗口,我們可以看到窗口左側(cè)有個(gè)箭頭,這個(gè)箭頭的意思是,該窗口是啟動(dòng)窗口,也就是當(dāng)應(yīng)用一啟動(dòng),這個(gè)窗口就會(huì)出現(xiàn)。
再往下是視圖,它表示了窗口所顯示內(nèi)容,你完全可以把它當(dāng)做 iOS 的 ViewController。我們可以將窗口和視圖之間的關(guān)聯(lián)去掉,這樣窗口就什么內(nèi)容都沒(méi)有了。但是啟動(dòng)時(shí)窗口還會(huì)顯示。但如果將窗口左側(cè)的箭頭去掉(取消選擇檢查器中的 Is Initial Controller 選項(xiàng)),那么程序啟動(dòng)時(shí)就什么都不會(huì)出現(xiàn)了。
下面我們?nèi)サ裟J(rèn)啟動(dòng)的窗口,來(lái)看看如何用代碼控制一個(gè)窗口的顯示。我們轉(zhuǎn)到 AppDelegate.swift
中,可以看到下面幾個(gè)聲明周期函數(shù):
當(dāng)應(yīng)用程序啟動(dòng)之后,
applicationDidFinishLaunching(:_)
函數(shù)就會(huì)被調(diào)用,與 iOS 稍有不同的是,我們必須要設(shè)置一個(gè) Storyboard 或 Xib 作為啟動(dòng)界面,因?yàn)檫@個(gè)啟動(dòng)界面中含有程序依賴的 NSApplication
對(duì)象,如果沒(méi)有設(shè)置,那么這兩個(gè)周期函數(shù)就不會(huì)執(zhí)行。既然我們已經(jīng)將 Main.storyboard
作為啟動(dòng)界面了,那么我們就可以在上面的周期函數(shù)中拿到要顯示的窗口,并顯示它。
不得不吐槽一下 Cocoa 的 API 設(shè)計(jì),顯示窗口的函數(shù)竟然叫這么個(gè)名字...
可以看出基本都是套路,首先拿到 Storyboard ,然后用標(biāo)識(shí)符來(lái)實(shí)例化一個(gè)控制器,得到的 WindowController 先調(diào)用一下 showWindow(:_)
,然后調(diào)用它所控制的窗口的 makeKeyAndOrderFront(:_)
方法,這樣窗口就顯示了。
Hello, world!
下面我們?cè)诖翱谝晥D里放點(diǎn)東西:
然后建立 Outlet,這點(diǎn)和 iOS 是一樣的。
創(chuàng)建一個(gè)新的視圖控制器:
拉線建立一個(gè) Segue,我們要在點(diǎn)擊按鈕時(shí)以 Sheet 的樣式顯示這個(gè)視圖。
再拉線將 "Dismiss" 按鈕與 dissmissController 動(dòng)作綁定。
這里有個(gè)小細(xì)節(jié),默認(rèn)按鈕如何設(shè)置?在以前的 OS X 版本中,默認(rèn)按鈕就是藍(lán)色閃閃發(fā)光的那個(gè)樣子。我們想將 "Dismiss" 按鈕設(shè)置為默認(rèn)按鈕,就需要將其快捷鍵設(shè)置為 Return 鍵,沒(méi)錯(cuò)就是這樣??
設(shè)置完后我們就會(huì)發(fā)現(xiàn)這個(gè)按鈕變成藍(lán)色了。
響應(yīng)按鈕點(diǎn)擊事件:
運(yùn)行一下看看效果:
OK,今天就先寫這么多了~