第一個(gè) OS X 應(yīng)用程序

國(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è) StoryboardXib 作為啟動(dòng)界面,因?yàn)檫@個(gè)啟動(dòng)界面中含有程序依賴的 NSApplication 對(duì)象,如果沒(méi)有設(shè)置,那么這兩個(gè)周期函數(shù)就不會(huì)執(zhí)行。
啟動(dòng)界面設(shè)置

既然我們已經(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,今天就先寫這么多了~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,245評(píng)論 4 61
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,349評(píng)論 25 708
  • 在茫茫人海中 相知 也算是一種緣分 何必知曉你的姓名 不過(guò)是一起 在人世浮沉的過(guò)客 且駐足于這兒吧 讓疲倦的靈魂安...
    思言舍主閱讀 359評(píng)論 0 1
  • 只要思想不滑坡,方法總比困難多。 面對(duì)困難,我們的第一反應(yīng)總是退縮。這ok,這是人的本性,沒(méi)問(wèn)題。 但是你要明白另...
    自律的黃老爺閱讀 240評(píng)論 0 10
  • 那年的櫻汐與水格并不能算是一對(duì)陌生人。他們就讀于同一所學(xué)校,教室在同一層樓的最遠(yuǎn)兩端。 呈弧形修建的教學(xué)樓,櫻汐總...
    coiky閱讀 678評(píng)論 0 0