多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術 > 用Swift開發(fā)Mac App(5)

用Swift開發(fā)Mac App(5)

來源:程序員人生   發(fā)布時間:2015-08-03 08:51:53 閱讀次數(shù):2989次

顯示昆蟲詳情

打開MasterViewController.swift 增加以下方法:

func selectedBugDoc() -> ScaryBugDoc? {

   let selectedRow = self.bugsTableView.selectedRow;

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

return self.bugs[selectedRow]

   }  

   return nil

}

這個方法根據(jù)用戶選中的行索引,從數(shù)據(jù)模型中檢索響應的對象。

然后是這個方法:

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)

}

這個方法根據(jù)ScaryBugDoc對象,將昆蟲的信息和圖片在UI上顯示。然后是這個方法:

func tableViewSelectionDidChange(notification: NSNotification!) {

   let selectedDoc = selectedBugDoc()

   updateDetailInfo(selectedDoc)        

}

當用戶改變了在表格中的選擇時,這個方法調用前兩個實用方法。

從OS X 10.10 Yosemite開始,View Controller 使用了新的

viewWillAppearviewDidLoad,和其它iOS風格的生命周期方法。而在OS X中傳統(tǒng)的創(chuàng)建視圖方法1般是 loadView(), 這個方法是向后兼容的,因此我們使用這個方法:

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控件:用于表示昆蟲驚悚指數(shù)的圖片,控件的delegate屬性和其它參數(shù)。

然后在MasterViewController.swift 最后增加1個extension聲明:

// MARK: - EDStarRatingProtocol  

extension MasterViewController: EDStarRatingProtocol {   }

等下在來實現(xiàn)這個EDStarRatingProtocol 協(xié)議。

先編譯運行程序,效果以下:


添加、刪除

打開MasterViewController.xib ,拖兩個“Gradient Button” 到 table view下。 選擇其中1個按鈕, 打開 Attributes 面板,刪除Title屬性中的內容,然后在Image屬性選擇,這將使按鈕顯示為1個“+”號。

一樣,將另外一個按鈕設置為“-”號按鈕(Image屬性選擇為 “NSRemoveTemplate”)。


打開Assistant Editor 窗口,確保當前內容為MasterViewController.swift文件,首先添加1個擴大的定義:

// MARK: - IBActions  

extension MasterViewController {   }

嚴格來講這個擴大并不是必須,但通過這類方式,我們能更好地組織我們的Swift代碼。然后選擇加號按鈕,右鍵拖1條線到這個擴大上。


在彈出的窗口中,Connection1欄選擇Action,Name1欄輸入 addBug, 然后點擊Connect.


這樣將創(chuàng)建1個 addBug(_:) 方法,每當加號按鈕被點擊,系統(tǒng)將調用這個方法。在減號按鈕上重復一樣步驟, Name請使用 deleteBug.

打開 MasterViewController.swift實現(xiàn)addBug方法以下:

// 1. 使用默許值創(chuàng)建1個新的ScaryBugDoc實例

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

// 2. 將該實例添加到model 數(shù)組

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)

實現(xiàn)deleteBug()方法以下:

// 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)

}


編輯

打開 MasterViewController.xib, 打開 Assistant Editor, 確保當前顯示的文件是 MasterViewController.swift

選中text field, 右鍵拖到 MasterViewController.swift 文件中的addBug()方法之前:


這將允許你為Text Field創(chuàng)建1個IBAction,Name 請使用bugTitleDidEndEdit


這個方法將在text field結束編輯時調用(當用戶按下回車鍵或離開Text Field控件)。

回到MasterViewController.swift, 添加方法:

func reloadSelectedBugRow() {

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

   let columnSet = NSIndexSet(index: 0)

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

}

在這個方法中,我們重新加載該行數(shù)據(jù)模型,你需要在模型數(shù)據(jù)被改動后調用這個方法。

bugTitleDidEndEdit 方法實現(xiàn)以下:

if let selectedDoc = selectedBugDoc() {

   selectedDoc.data.title = self.bugTitleView.stringValue

   reloadSelectedBugRow()

}

首先,調用selectedBugDoc()取得相干昆蟲的信息,然后從text field讀取文本字符串,并用它來更新模型中的昆蟲名稱。最后調用reloadSelectedBugRow()通知單元格進行刷新。

注意: 通知table view自己刷新cell要比直接操縱cell的內容要好。

運行App,從列表選中某個昆蟲,嘗試修改其名稱(記得按回車鍵),表格中的昆蟲名將隨之改變!

但是如果你切換到其他昆蟲,然后返回修改的那1個昆蟲,你會發(fā)現(xiàn)數(shù)據(jù)又回到原來(未改動前)了。這是由于我們未將模型對象進行持久化(保存進文件)。



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产亚洲精品一区二区久久 | 精品欧美一区二区三区在线 | 欧美精品videos | 美国毛片免费观看 | 精品久久久久久综合网 | 国内精品视频免费观看 | 精品在线第一页 | 国产成人久久 | 久久天天躁狠狠躁夜夜 | 国内精品视频 在线播放 | 日本香蕉一区二区三区 | 四虎永久免费网站入口2020 | 女人18毛片视频一级毛片容 | 国产精品国产三级国产专不∫ | 欧美一区视频在线 | 伊人| 日韩精品福利在线 | 小说区图片区亚洲 | 久久久久国产精品嫩草影院 | 日本午夜三级 | 亚洲精品一区二区乱码在线观看 | 午夜在线 | 亚洲精品永久www忘忧草 | 伊人久久大香线蕉 | 91成人福利 | 波多野结衣视频在线观看地址免费 | 老司机亚洲精品影院在线 | 日本免费色视频 | 国产精品毛片在线更新 | 中国国产一级毛片 | 国产三级自拍视频 | 国产深夜福利在线观看网站 | 中文在线播放 | 亚洲欧洲国产综合 | 老司机免费福利在线观看 | 九九久久99综合一区二区 | 一级做a爱过程免费视频超级 | jlzzjlzzjlzz亚洲女 | 亚洲图片欧美日韩 | 欧美极品videosvideoxxx | 国产成人精品久久一区二区小说 |