Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用Swift开发Mac App(5)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

显示昆虫详情 打开MasterViewController.swift 增加如下方法: func SELEctedBugDoc() -> ScaryBugDoc? {    let SELEctedRow = self.bugsTableView.SELEctedRow;    if SELEctedRow >= 0 && SELEctedRow < self.bugs.count { retur

显示昆虫详情

打开@H_322_16@masterViewController.swift增加如下方法:

@H_696_29@

func SELEctedBugDoc() -> ScaryBugDoc? {

let SELEctedRow = self.bugsTableView.SELEctedRow;

if SELEctedRow >= 0 && SELEctedRow < self.bugs.count {

return self.bugs[SELEctedRow]

}

return nil

}

这个方法根据用户选中的行索引,从数据模型中检索响应的对象。

然后是这个方法:

@H_696_29@

func updateDetailInfo(doc: ScaryBugDoc?) {

var title = ""

var image: NSImage?

var rating = 0.0

if let scaryBugDoc = doc {

title = scaryBugDoc.data.title

image = scaryBugDoc.fullImage

rating = scaryBugDoc.data.rating

}

self.bugtitleView.stringvalue = title

self.bugImageView.image = image

self.bugrating.rating = Float(rating)

}

这个方法根据ScaryBugDoc对象,将昆虫的信息和图片在UI上显示。然后是这个方法

@H_696_29@

func tableViewSELEctionDidChange(notification: Nsnotification!) {

let SELEctedDoc = SELEctedBugDoc()

updateDetailInfo(SELEctedDoc)

}

用户改变了在表格中的选择时,这个方法调用前两个实用方法

从OS X 10.10 Yosemite开始,View Controller 使用了新的

viewWillAppear,viewDidLoad,以及其它iOS风格的生命周期方法。而在OS X中传统的创建视图方法一般是loadView(),这个方法是向后兼容的,因此我们使用这个方法:

@H_696_29@

override func loadView() {

super.loadView()

self.bugrating.starImage = NSImage(named: "star.png")

self.bugrating.starHighlightedImage = NSImage(named: "shockedface2_full.png")

self.bugrating.starImage = NSImage(named: "shockedface2_empty.png")

self.bugrating.delegate = self

self.bugrating.maxrating = 5

self.bugrating.horizontalMargin = 12

self.bugrating.editable = true

self.bugrating.displaymode = UInt(EDStarratingDisplayFull)

self.bugrating.rating = Float(0.0)

}

在这里,我们初始化EDStarrating控件:用于表示昆虫惊悚指数的图片,控件的delegate@L_618_39@以及其它参数。

然后在@H_322_16@masterViewController.swift最后增加一个extension声明:

@H_696_29@

// MARK: - EDStarratingProtocol

extension MasterViewController: EDStarratingProtocol { }

等下在来实现这个EDStarratingProtocol协议。

先编译运行程序,效果如下:


添加删除

打开@H_322_16@masterViewController.xib,拖两个“Gradient Button” 到 table view下。 选择其中一个按钮,打开 Attributes 面板,删除title@L_618_39@中的内容,然后在Image@L_618_39@选择,这将使按钮显示一个“+”号。

同样,将另一个按钮设置为“-”号按钮(Image@L_618_39@选择为 “NSRemoveTemplate”)。


打开Assistant Editor 窗口,确保当前内容为MasterViewController.swift文件,首先添加一个扩展的定义:

@H_696_29@

// MARK: - IBACtions

extension MasterViewController { }

严格来说这个扩展并非必须,但通过这种方式,我们能更好地组织我们的Swift代码。然后选择加号按钮,右键拖一条线到这个扩展上。


在弹出的窗口中,Connection一栏选择Action,Name一栏输入addBug,然后点击Connect.


这样将创建一个 addBug(_:) 方法,每当加号按钮被点击,系统将调用这个方法。在减号按钮上重复同样步骤,Name请使用deleteBug.

打开@H_322_16@masterViewController.swift实现addBug方法如下:

@H_696_29@

// 1. 使用认值创建一个新的ScaryBugDoc实例

let newDoc = ScaryBugDoc(title: "New Bug",rating: 0.0,thumbImage: nil,fullImage: nil)

// 2. 将该实例添加@H_426_410@model 数组

self.bugs.append(newDoc)

let newRowIndex = self.bugs.count - 1

// 3.table view插入新行

self.bugsTableView.insertRowsATindexes(NSIndexSet(index: newRowIndex),withAnimation: NSTableViewAnimationOptions.EffectGap)

// 4. 选中并滚动到新行

self.bugsTableView.SELEctRowIndexes(NSIndexSet(index: newRowIndex),byExtendingSELEction:false)

self.bugsTableView.scrollRowToVisible(newRowIndex)

实现deleteBug()方法如下:

@H_696_29@

// 1. Get SELEcted doc

if let SELEctedDoc = SELEctedBugDoc() {

// 2. Remove the bug from the model

self.bugs.removeATindex(self.bugsTableView.SELEctedRow)

// 3. Remove the SELEcted row from the table view

self.bugsTableView.removeRowsATindexes(

NSIndexSet(index:self.bugsTableView.SELEctedRow),

withAnimation: NSTableViewAnimationOptions.SlideRight)

// 4. Clear detail info

updateDetailInfo(nil)

}


编辑

打开@H_322_16@masterViewController.xib,打开 Assistant Editor,确保当前显示文件@H_322_16@masterViewController.swift

选中text field,右键拖到@H_322_16@masterViewController.swift文件中的addBug()方法之前:


这将允许你为Text Field创建一个IBACtion,Name 请使用bugtitleDidEndEdit


这个方法将在text field结束编辑时调用(当用户按下回车键或者离开Text Field控件)。

回到@H_322_16@masterViewController.swift,添加方法

@H_696_29@

func reloadSELEctedBugRow() {

let indexSet = NSIndexSet(index: self.bugsTableView.SELEctedRow)

let columnSet = NSIndexSet(index: 0)

self.bugsTableView.reloadDataForRowIndexes(indexSet,columnIndexes: columnSet)

}

在这方法中,我们重新加载该行数据模型,你需要在模型数据被改动后调用这个方法

bugtitleDidEndEdit方法实现如下:

@H_696_29@

if let SELEctedDoc = SELEctedBugDoc() {

SELEctedDoc.data.title = self.bugtitleView.stringvalue

reloadSELEctedBugRow()

}

首先,调用SELEctedBugDoc()获得相关昆虫的信息,然后从text field读取文本字符串,并用它来更新模型中的昆虫名称。最后调用reloadSELEctedBugRow()通知单元格进行刷新。

@H_618_922@注意:通知table view自己刷新cell要比直接操纵cell的内容要好。

运行App,从列表选中某个昆虫,尝试修改名称(记得按回车键),表格中的昆虫名将随之改变!

但是如果你切换到其他昆虫,然后返回修改的那一个昆虫,你会发现数据又回到原来(未改动前)了。这是因我们没有将模型对象进行持久化(保存进文件)。

大佬总结

以上是大佬教程为你收集整理的用Swift开发Mac App(5)全部内容,希望文章能够帮你解决用Swift开发Mac App(5)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。