使用swift开发OSX应用
原文:http://www.raywenderlich.com/87002/getting-started-with-os-x-and-swift-tutorial-part-1 翻译原文:http://blog.csdn.net/kmyhy/article/details/45150649
打开Xcode,使用FileNewProject…菜单,在弹出窗口中选择 “OS X/Application”,然后Next。 在接下来的窗口中,配置App信息。在product name栏中输入ScaryBugsMac,输入你的机构名以及机构ID。剩余字段保留为空白。 选择Swift作为开发语言,保持所有选项框反选,document extension栏保留为空白。然后点Next。 然后Xcode会要求你选择项目保存路径。选择一个物理路径,然后点击Create。 项目就创建完了,这是一个单窗口App。点击工具栏左上角的Run按钮,运行这个程序,效果如下图所示。 首先我们来总结一下。我们使用Xcode模板创建了一个Mac App项目,然后编译运行了这个空白项目。与iOS开发的最大不同在于: ·窗口不需要特别指明大小,比如iPhone或iPad屏幕大小——MacApp的窗口是可以通过拖动来改变大小的。 ·Map App可以拥有多个窗口,窗口支持最小化,重排等操作。 然后我们来新建一个View Controller,并在它上面放入App的主界面。使用 FileNewFile…菜单,在弹出窗口中,选择OS XSourceCocoa Class,然后点Next。 类名填入 MasterViewController,“Subclass of”填入NSViewController。确保“Also create XIB file for user interface” 为勾选,然后点Next。 在最后一个弹出窗口中,点击Create。新的View Controller将显示在项目导航窗口中: 打开MasterViewController.xib。需要注意的是,在Mac App中,有大量的类和iOS中都类似,只不过是以NS前缀命名。例如NSScrollView、NSLabel、NSButton等。 在右下角的UI Controls面板(位于第三个Tab)中,选中NSTableView将它拖到MasterViewController.xib的画布中。 不要担心Table View的大小,我们待会会来处理它。 AppDelegate.swif。在window属性下面插入如下语句:
找到applicationDidFinishLaunching方法,这个方法在App启动时调用。 注意:这个方法等同于iOS中的application(_:didFinishLaunchingWithOptions:)方法。 在applicationDidFinishLaunching方法内,加入以下语句:
在 OS X中,窗口(NSWindow对象)总是有一个默认的View,即contentView。它自动占据整个窗口的大小。当我们想在窗口中使用自己的视图时,需要用addSubview方法将它添加到contentView的subviews中。 在iOS开发中,我们可以设置将一个View Controller直接设置为窗口的rootViewController属性,但在OS X中你只能将视图添加到contentView的subviews,因为OS X中没有rootViewController的概念。 运行App,你将看到如下画面:
数据模型 接下来创建数据模型。 首先我们来熟悉一下Xcode项目文件的组织结构: 默认模板会创建一个以项目名称为名的文件夹。在这个文件夹下有一个supporting files的子文件夹,其中存放plist和资源文件。当项目很大时,会创建大量的文件,查找文件就会变得很困难。因此我们需要有一个良好的项目文件组织形式。 首先,我们新建一个文件夹(group),命名为GUI。在ScaryBugsMac文件夹上点击右键,将弹出一个快捷菜单,选择NewGroup,然后输入GUI。 然后将所有跟UI有关的文件拖到这个文件夹(AppDelegate.swift,MasterViewController.swift/.xibandMainMenu.xib),如下图所示: 然后新建另一个文件夹Model。 在Model文件夹中将包含如下内容 ·ScaryBugData: 包含两个属性:昆虫的名称及昆虫的估价。 ScaryBugDoc: 包含3个属性:昆虫图片、昆虫缩略图及一个ScaryBugData属性。 实现模型对象 :如果你阅读过How ToCreate A Simple iPhone App on iOS 5 Tutorial,你会发现接下来的内容和那篇教程中的相应内容几乎一模一样。这是因为Mac和iOS编程大部分SDK都是系统的,除了UI和操作系统相关的API。而模型对象不涉及UI,因此模型对象的代码基本是一致的。 对于ScaryBug的模型类,将Mac版本与iOS版本只有一个地方不同,即将UIImage类修改为NSImage即可。当然,你也需要将它从O-C实现修改为Swift实现。 在Model文件夹上点击右键,点击 “New File…”,然后选择OS XSourceCocoa Class 模板,然后点击Next。 类名输入ScaryBugData,Subclass of 输入NSObject,点击 Next。 在最后一个弹出界面中,点击Create。项目导航窗口将显示如下: ScaryBugData.swift替换为如下内容: 然后创建另一个模型对象ScaryBugDoc。 ScaryBugDoc.swift编辑为如下内容: 这个数组属性用于存储昆虫列表,接下来我们将会用一些数据填充这个数组。 填充数据及图片 MasterViewController需要用一系列昆虫来填充。你可以从此处下载所需的 昆虫图片。 下载完图片之后,,将所有图片从Finder中拖到Images.xcassets中如下图右边AppIcon之下的位置: MasterViewController.swift添加如下方法:
编译运行程序,确保编译通过。 接下来,我们将在UI中显示这些图片和数据。 显示昆虫列表 在 OS X中,Table View使用NSTableView类,它等同于iOS的UITableView类,但有一个最大的不同是:NSTableView的每一行有多个列或多个单元格。 在OS X 10.7Lion之前,table view cell继承于NSCell类。而后者并非NSView类,因此开发者需要自己处理绘图和鼠标事件。 从OS X 10.7开始,table view从 NSView继承。这样就和UITableView差不多了。cell也有相应的View类型,因此也和iOS中的类似——这样我们就轻松得多了! 在本教程中,使用的是基于View的TableView。如果你想了解NSTableView的用法,你可以阅读这里,它对 table views 的用法进行了详细的说明。 MasterViewController.xib,选中table view。注意Table View位于Scroll View中的Clip View中,因此第一个点击你选中的会是ScrollView,第二次点击你选中的才是ClipView,第三次点击才会选中Table View。 当然,你也可以直接从IB的Objects面板中选择Table View对象(展开 Clip View对象)。 选中Table View之后,在属性面板中,确认Content Mode一项是设置为View Based而不是Cell Based。同时,因为我们的列表仅显示单列,所以将Columns属性修改为1。 勾选 “Alternating Rows”属性,让表格以“明暗颜色交替”的方式绘制单元格。 反选 “Headers” 属性,因为我们不需要在表格上方显示一个标题。 接下来我们修改单元格的大小。选择Table View上的列,拖动它的大小使其占据整个表格宽度。 然后是单元格的配置。我们需要在单元格中显示昆虫的图片和名称,因此需要在Cell中添加一个Image和一个文本控件。 IB中有一种带Image View和Text Field的NSTableCellView对象,我们可以使用它。 在Object library 面板中,找到 “Image & Text Table Cell View”,将它拖到Table View中。 在Table View中,将原来的cell删除(用delete键)。 选中Table View Cell,在Size面板中,将高度调整为32。 然后选中Image View和 Text Field,使它们位于单元格中心,并调整ImageView和Text Field的大小,使它们看起来如下图所示: 接下来要为每一列设置一个id。当然对于本教程来说,我们只有一个列,因此列id可能不是必须的。 在Objects面板中选择表格列,打开Identity面板,将Identifier设置为BugColumn。 如同在iOS中一样,Table View也有Data Source和Delegate属性。正常情况下,这两个属性都是同一个对象,即MasterViewController。 选择Table View,打开Connections面板,在Outlets一项下找到delegate和data source。 点击delegate右边的小圆圈,拖到Objects面板中的“File’s Owner”上。 这将吧Table View 的delegate 属性设置为MasterViewController。重复同样的动作,设置Data Source属性。 最终如下图所示:MasterViewController.swift将下列代码放在文件最后:
|