微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Swift开发Mac App(6)

接下来实现EDStarrating的编辑。 在loadView 方法中,我们已经配置了EDStarrating的delegate属性,我们仅仅需要实现相关委托方法即可。

打开MasterViewController.swift EDStarratingProtocol扩展中添加如下方法:

func staRSSelectionChanged(control: EDStarrating!,rating: Float) {

if let selectedDoc = selectedBugDoc() {

selectedDoc.data.rating = Double(self.bugrating.rating)

}

}

跟前面几乎一样: 获得用户选定的昆虫模型,用修改后的值赋值给它。

运行程序。需要注意的是,用户设定新的评级后这个值是被持久化的,哪怕你切换到其他昆虫然后有切换回来。


获取本地图片

打开MasterViewController.xib,拖一个“Push Button” 控件到image view下方。

修改按钮的title 为 “Change Picture”:


如同加号按钮和减号按钮,为Change Picture 按钮创建一个IBAction,命名为changePicture

这个action在按钮点击时调用

OS X 有一个特有的控件叫做 IKPictureTaker,允许用户从计算机上选择一张图片,或者从摄像头捕捉一张图片

用户选择了图片之后,这个控件会调用指定的delegate方法

打开MasterViewController.swift加入以下import 语句:

import Quartz

这个 image picker属于 Quartz 框架。

changePicture方法中,添加代码

if let selectedDoc = selectedBugDoc() {

IKPictureTaker().beginPictureTakerSheetForWindow(self.view.window,

withDelegate: self,

didEndSelector: "pictureTakerDidEnd:returnCode:contextInfo:",

contextInfo: nil)

}

我们先检查用户是否选择了有效的昆虫,如果是,显示picture taker控件。

然后实现pictureTakerDidEnd(_:returnCode:contextInfo:)方法

func pictureTakerDidEnd(picker: IKPictureTaker,returnCode: NSInteger,contextInfo: UnsafePointer<Void>) {

let image = picker.outputimage()

if image != nil && returnCode == NSOKButton {

self.bugImageView.image = image

if let selectedDoc = selectedBugDoc() {

selectedDoc.fullImage = image

selectedDoc.thumbImage = image.imageByScalingAndCroppingForSize(CGSize(width: 44,height: 44)) reloadSelectedBugRow()

}

}

}

首先检查用户是否点击了OK (NSOKButton) 以及选择的图片是否有效。

如果是,获取用户选定的昆虫模型,修改昆虫的图片缩略图,然后更新cell。

运行程序,选择一个昆虫,点击Change Picture,从本地文件或摄像头中获取一张图片,这张图片将立即在选定的cell中得到更新。

一些细节上的问题

当你运行程序,视图改变窗口大小,你会发现控件并不能自动适应大小。


这是窗口拖大后的效果


pplns:o="urn:schemas-microsoft-com:office:office"xmlns:w="urn:schemas-microsoft-com:office:word"xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"xmlns="http://www.w3.org/TR/REC-html40">

这是窗口缩小后的效果

另外,我们还没有为App数据进行持久化。一旦App重启,用户对数据进行的增加修改都会丢失。

打开MasterViewController.xib,将View的Size缩小至最小能够足以显示所有控件的程度。


在上图中,3个按钮放在了同一排。在右边细节展示区域中,所有的控件都左对齐,且宽度一致(除了ChangePicture按钮)。

然后,我们在中间增加一个分割线。拖一个VerticalLine到View的中央。


复原操作

复原操作用于将数据恢复至原来的状态。拖一个Push 按钮在Table View下方,修改标题为Reset。然后打开Assistant Editor,为按钮创建一个IBAction,名为resetData(确认当前打开的源文件MasterViewController.swift)。


resetData()方法加入如下代码

setupSampleBugs() 
updateDetailInfo(nil) 
bugsTableView.reloadData()

setupSampleBugs()方法调用会恢复所有模型数据。以nil作为参数值调用updateDetailInfo方法将清除所有细节字段。然后刷新Table View。

运行程序,添加删除修改任意数据。然后点击Reset按钮,所有数据又恢复原样。

原文地址:https://www.jb51.cc/swift/327207.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐