用Swift开发Mac App(3)

显示昆虫列表

在 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 将下列代码放在文件最后:


// MARK: - NSTableViewDataSource

extension MasterViewController: NSTableViewDataSource {

func numberOfRowsInTableView(aTableView: NSTableView!) -> Int {

return self.bugs.count

}

func tableView(tableView: NSTableView!, viewForTableColumn tableColumn: NSTableColumn!, row: Int) -> NSView! {

// 1

var cellView: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn.identifier, owner: self) as NSTableCellView

// 2

if tableColumn.identifier == "BugColumn" {

// 3

let bugDoc = self.bugs[row]

cellView.imageView!.image = bugDoc.thumbImage

cellView.textField!.stringValue = bugDoc.data.title

return cellView

}

return cellView

}

}

// MARK: - NSTableViewDelegate

extension MasterViewController: NSTableViewDelegate { }

我们通过扩展让MasterViewController 采用NSTableViewDelegate 和NSTableViewDataSource协议。

要让列表渲染数据至少需要实现两个数据源方法。

首先是numberOfRowsInTableView 方法,OS通过这个方法获取要渲染的表格行数。

其次是tableView(_:viewForTableColumn:row:)方法。OS通过这个方法知道如何去渲染每行中的每个单元格。在这个方法中,我们需要用数据对单元格进行填充。

运行程序,如果一切正常,我们将在表格中看到昆虫列表。

下载资源

为了完成本教程,你可能需要下载这些压缩包,并解压缩。

注意: 为了将昆虫分成 “一点也不可怕” 到 “极度恐怖”几个级别,你还需要用到一个开源的分级组件EDStarRating,这也被包含在压缩包中。

在本教程中,我们不会解释如何实现这个组件,而只是演示如何在项目中使用它。压缩包中还包括了一个NSImage类别,可以从一张大图片生成缩略图。 此外,还包括3张怪脸图片,分别用于显示昆虫的不同级别。

关于 EDStarRating组件,你可以参考它的 github 主页.

首先,在项目导航窗口中创建一个名为Art的文件夹,并将3个怪脸图片拖到这个文件夹中——确保“Copy items if needed” 已勾选, 以及Add to targets中的“ScaryBugsMac” 已选上。

再创建一个名为“Views” 的文件夹, 将EDStarRating.h 和EDStarRating.m拖到该文件夹。 再次确保“Copy items if needed” 已勾选以及Add to targets中的“ScaryBugsMac” 已选上。

点击Finish. 在下一窗口当被问到 “Would you like to configure an Objective-C bridgingheader?” 时选择Yes。这将创建一个Objective-C 类到Swift 代码的桥接头文件。

对于 NSImage+Extras.h 和NSImage+Extras.m,重复上述步骤,只不过这次将它们拖进的是“Helpers”文件夹。

打开ScaryBugsMac-Bridging-Header.h 加入以下import语句:


#import "EDStarRating.h" #import "NSImage+Extras.h"

以下为最终效果,其中桥接头文件已经被我们移到 Supporting Files 文件夹中:

时间: 2024-08-03 22:05:58

用Swift开发Mac App(3)的相关文章

用Swift开发Mac App(1)

原文超级详细(图文),小白表示毫无压力:http://www.raywenderlich.com/87002/getting-started-with-os-x-and-swift-tutorial-part-1 由于原文浅显到略显啰嗦,因此翻译时我有选择地删除了部分段落. 打开Xcode,使用 File\NewProject- 菜单,在弹出窗口中选择 "OS X/Application",然后Next. 在接下来的窗口中,配置App信息.在product name栏中输入ScaryB

用Swift开发Mac App(8)

关注细节 关于用户体验方面,我们仍然有一些细节值得注意.例如:运行App,不要选择任何昆虫,点击"Delete" 或者 "Change Picture" 按钮,什么都不会发生,Why? 作为程序员,你当然知道当用户什么都没选择的情况下,不应当执行任何操作,但对于用户而言,这种情况仍然显得不太友好: 我们通过以下方式来解决这个问题: ·      如果用户选中了某个单元格,我们才让Delete按钮.Change picture按钮.文本框和rating view可用.

用Swift开发Mac App(7)

缩放 打开MasterViewController.xib,在Size面板中查看 Custome View的大小.在本例中,它应该是540x400大小.但是读者的这个数字会有不同.不管是多大,请记下这个数字.待会会用到. 这将是App出口的最小大小.打开 MainMenu.xib, 选择 window 对象.在Size 面板中,勾上Constraint右边的Minimum Size 选项,然后将width 和 height 修改为同样的值. 运行程序. 改变出口的大小,这次当窗口缩小到最小尺寸后

用Swift开发Mac App(4)

创建详情页面 在iOS中,典型的"主-细页面App"需要创建两个视图,但在 OS X,由于屏幕不再受到限制,我们可以将它们合并在同一个视图中. 打开MasterViewController.xib,选中view,将宽度和高度拖大.如图: 我们需要显示下列信息: 昆虫名, 惊悚指数和昆虫图片. 昆虫名用NSTextField 控件显示,惊悚指数用EDStarRating 控件显示,昆虫图片则用NSImageView显示. 此外,我们还需要两个Label,用于表示每个字段的意义(标题).

用Swift开发Mac App(5)

显示昆虫详情 打开MasterViewController.swift 增加如下方法: func selectedBugDoc() -> ScaryBugDoc? { let selectedRow = self.bugsTableView.selectedRow; if selectedRow >= 0 && selectedRow < self.bugs.count { return self.bugs[selectedRow] } return nil } 这个方法

用Swift开发Mac App(6)

接下来实现EDStarRating 的编辑. 在loadView 方法中,我们已经配置了EDStarRating的delegate属性,我们仅仅需要实现相关委托方法即可. 打开MasterViewController.swift 在 EDStarRatingProtocol 扩展中添加如下方法: func starsSelectionChanged(control: EDStarRating!, rating: Float) { if let selectedDoc = selectedBugD

用Swift语言做App开发之单元测试

作为一个有质量保障的应用程序,当然少不了单元测试:Swift开发的App也亦如此,此文将以一个简单的实例来介绍Swift中的单元测试. 这里我们使用XCode模版自带的XCTest框架,此框架包含了一个名为XCTestCase的类,所有的测试类都应该继承自它:按照约定俗成所有的测试方法名都应以test开头,并不能包含任何参数,只有这样,这些测试方法才能在运行测试时被自动执行:在每个测试方法里面,我们可以通过调用XCTAssert*函数去断言一个操作成功与否,如判等函数XCTAssertEqual

Swift开发快速上手系列教程目录-陆续完善,由浅入深

Swift开发教程 一.Swift基础 Swift教程01-使用switfc终端命令编译运行swift程序 Swift教程02-抓住下一个浪潮之巅 Swift教程03-playground剖析swift语言 Swift教程04-定义声明变量重要原则 Swift教程05-基本数据类型(一)整型浮点型 Swift教程06-基本数据类型(二)Bool布尔类型对比Java-boolean,Objc-BOOL Swift教程07-基本数据类型(三)元组类型tuple Swift教程08-基本数据类型(四)

使用Vmware虚拟机部署Swift开发环境之Mac OS X系统安装

 一.使用VMware虚拟机部署Swift开发环境所需工具: Vmware Workstation 10.0虚拟机软件 VM安装Mac解锁工具Unlock 苹果操作系统(Mac OS X Mavericks 10.9.4) 下载地址:http://pan.baidu.com/s/1qWLkffQ 密码:ewb2 二.VMware Workstation 10上安装并使用Mac OS X 10.9 1.安装VMware Workstation 10虚拟机,安装过程不再赘述. 2.使用Mac解锁