第一个 OS X 应用程序
国内做 iOS 开发的开发者很多,但是 OS X 开发者数量却远远不及。与此同时,有关 OS X 开发的文章和参考资料也十分少,自学起来比较困难,所以我决定在这个文集中记录一些 OS X 开发的点滴。
第一篇我们来点简单的。
建立项目
首先启动 Xcode,选择新建项目,项目模板当然就是 OS X Application 啦
![](https://img.haomeiwen.com/i1507403/8f5fce99c9e93b71.png)
下面是选择使用的语言和一些技术,我这里比较推荐大家选择 Swift 语言,当然你也可以使用你熟悉 Objective-C,然后勾选 Use Storyboards 选项,因为使用 Storyboard 可以极大地提高你的开发效率。
![](https://img.haomeiwen.com/i1507403/d51d082ec09c5e6a.png)
What's in Storyboard
打开 Main.storyboard
文件,我们看看里面有什么内容。
![](https://img.haomeiwen.com/i1507403/898a497ba9369c70.png)
OMG,感觉好复杂,有三个视觉元素:主菜单、窗口、视图。这些分别都是什么鬼?
我们知道每个 OS X 应用都有一个单独的菜单,那么最上面的菜单就是整个应用显示在状态栏上的主菜单。
接下来是窗口,我们可以看到窗口左侧有个箭头,这个箭头的意思是,该窗口是启动窗口,也就是当应用一启动,这个窗口就会出现。
再往下是视图,它表示了窗口所显示内容,你完全可以把它当做 iOS 的 ViewController。我们可以将窗口和视图之间的关联去掉,这样窗口就什么内容都没有了。但是启动时窗口还会显示。但如果将窗口左侧的箭头去掉(取消选择检查器中的 Is Initial Controller 选项),那么程序启动时就什么都不会出现了。
![](https://img.haomeiwen.com/i1507403/8aec611a700898d6.png)
下面我们去掉默认启动的窗口,来看看如何用代码控制一个窗口的显示。我们转到 AppDelegate.swift
中,可以看到下面几个声明周期函数:
![](https://img.haomeiwen.com/i1507403/bbcec6cb57b827f7.png)
当应用程序启动之后,
applicationDidFinishLaunching(:_)
函数就会被调用,与 iOS 稍有不同的是,我们必须要设置一个 Storyboard 或 Xib 作为启动界面,因为这个启动界面中含有程序依赖的 NSApplication
对象,如果没有设置,那么这两个周期函数就不会执行。![](https://img.haomeiwen.com/i1507403/b6849f715a88fa88.png)
既然我们已经将 Main.storyboard
作为启动界面了,那么我们就可以在上面的周期函数中拿到要显示的窗口,并显示它。
![](https://img.haomeiwen.com/i1507403/598ddaec16d2445e.png)
不得不吐槽一下 Cocoa 的 API 设计,显示窗口的函数竟然叫这么个名字...
可以看出基本都是套路,首先拿到 Storyboard ,然后用标识符来实例化一个控制器,得到的 WindowController 先调用一下 showWindow(:_)
,然后调用它所控制的窗口的 makeKeyAndOrderFront(:_)
方法,这样窗口就显示了。
Hello, world!
下面我们在窗口视图里放点东西:
![](https://img.haomeiwen.com/i1507403/d4971e8f9bf9ab0b.png)
然后建立 Outlet,这点和 iOS 是一样的。
![](https://img.haomeiwen.com/i1507403/cdd67b87d39f9092.png)
创建一个新的视图控制器:
![](https://img.haomeiwen.com/i1507403/d802887214152e22.png)
拉线建立一个 Segue,我们要在点击按钮时以 Sheet 的样式显示这个视图。
再拉线将 "Dismiss" 按钮与 dissmissController 动作绑定。
![](https://img.haomeiwen.com/i1507403/131e20f593899b3f.png)
这里有个小细节,默认按钮如何设置?在以前的 OS X 版本中,默认按钮就是蓝色闪闪发光的那个样子。我们想将 "Dismiss" 按钮设置为默认按钮,就需要将其快捷键设置为 Return 键,没错就是这样😂
![](https://img.haomeiwen.com/i1507403/f18a86f12f5b3041.png)
设置完后我们就会发现这个按钮变成蓝色了。
响应按钮点击事件:
![](https://img.haomeiwen.com/i1507403/2bb67968c8b67c4c.png)
运行一下看看效果:
![](https://img.haomeiwen.com/i1507403/2889f4c1d789bc53.png)
OK,今天就先写这么多了~