日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

用Swift開發Mac App(5)

來源:程序員人生   發布時間:2015-08-03 08:51:53 閱讀次數:2996次

顯示昆蟲詳情

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

func selectedBugDoc() -> ScaryBugDoc? {

   let selectedRow = self.bugsTableView.selectedRow;

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

return self.bugs[selectedRow]

   }  

   return nil

}

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

然后是這個方法:

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上顯示。然后是這個方法:

func tableViewSelectionDidChange(notification: NSNotification!) {

   let selectedDoc = selectedBugDoc()

   updateDetailInfo(selectedDoc)        

}

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

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

viewWillAppearviewDidLoad,和其它iOS風格的生命周期方法。而在OS X中傳統的創建視圖方法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控件:用于表示昆蟲驚悚指數的圖片,控件的delegate屬性和其它參數。

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

// MARK: - EDStarRatingProtocol  

extension MasterViewController: EDStarRatingProtocol {   }

等下在來實現這個EDStarRatingProtocol 協議。

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


添加刪除

打開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.


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

打開 MasterViewController.swift實現addBug方法以下:

// 1. 使用默許值創建1個新的ScaryBugDoc實例

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

// 2. 將該實例添加到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()方法以下:

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

}

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

bugTitleDidEndEdit 方法實現以下:

if let selectedDoc = selectedBugDoc() {

   selectedDoc.data.title = self.bugTitleView.stringValue

   reloadSelectedBugRow()

}

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

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

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

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



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 一区二区三区免费 | 国产区一区二区三区 | 日本精品久久 | 亚洲 欧美 日韩 在线 | 色综合天天综合网国产成人网 | 91国产精品| 亚洲电影在线播放 | 日韩精品 | 99久久精品国产麻豆演员表 | 国产精品一区二区三区四区五区 | 亚洲欧美久久 | 国产精品视频网址 | 欧美精品在线视频 | 久久久久久亚洲精品 | 亚洲一区二区三区在线免费观看 | 一区三区视频在线观看 | 欧美三级网 | 亚洲高清成人 | 婷婷久久综合九色综合绿巨人 | 一区二区国产在线观看 | 国产最新精品视频 | 中国一级黄 | 91在线精品秘密一区二区 | 国产精品区视频 | 成人欧美一区二区三区视频网页 | 欧美顶级大胆免费视频 | 国产成人精品久久久 | 国产视频一二区 | 精品国产精品三级精品av网址 | 91欧美精品成人综合在线观看 | 福利片免费观看 | 久久精品国产亚洲一区二区三区 | 久久aa| 一级久久精品 | 香蕉成人啪国产精品视频综合网 | 久久国产区 | 亚洲精品一区二区三区蜜桃久 | 免费黄色高清视频 | 国产精品久久久久久久9999 | 中文字幕在线一区二区三区 | 最新黄色免费网站 |