2015-10-10 44 views
0

我在mac應用程序中有nstableview。一列有名字,第二個數字,第三個有複選框。當用戶打開復選框時,這應該根據同一行中第一列的名稱觸發函數。要從第一列獲得名稱(用於觸發函數)我需要知道行索引,並使用函數rowForView(_ view:NSView)。問題是我應該在這個函數中用作參數(_ view:NSView)。以下是代碼。我不知道我是否正朝着正確的方向去獲得我上面描述的內容。如何使用nstableview中的複選框來觸發函數,在swift中

相關的問題是我如何從表的第一列獲得名稱數組。我需要這個,因爲如果我將根據名稱對錶進行排序,那麼我不能使用我的數組,它用作填充nstableview的數據,我需要有序名稱數組才能正確觸發函數。

@IBOutlet weak var myCheckbox: NSButton! 

    @IBAction func checkboxToShowRestrctaseSites(sender: AnyObject) { 
    if myCheckbox.state == NSOnState 
    { 
     let objectOfPresentRestrictase = RestrictasesSorting(restrictase: "", dna: inputDnaFromUser.string!) 
     var tableOfNumberedRestrictase = objectOfPresentRestrictase.makeListOfPresentRestrictase() 
     var listOfAllRestrictaseWithSites = objectOfPresentRestrictase.searchForRestrictionSiteInList().1 

     var row = myTable.rowForView(_ view: NSView) 
     var name = Array(tableOfNumberedRestrictase.keys)[row] 
     var site = listOfAllRestrictaseWithSites[name] 

UPDATE 我發現觸發功能啓動,如果我刪除,如果myCheckbox.state == NSOnState上班,當我用發件人作爲一個NSView作爲參數功能rowForView。要控制ON和OFF狀態,我還可以在發送條件中使用發件人。下面的代碼。

@IBAction func checkboxToShowRestrctaseSites(sender: AnyObject){ 
if sender.state == NSOnState 
{ 
     let objectOfPresentRestrictase = RestrictasesSorting(restrictase: "", dna: inputDnaFromUser.string!) 
     var tableOfNumberedRestrictase = objectOfPresentRestrictase.makeListOfPresentRestrictase() 
     var listOfAllRestrictaseWithSites = objectOfPresentRestrictase.searchForRestrictionSiteInList().1 

     var row = myTable.rowForView(sender as! NSView) 
     var name = Array(tableOfNumberedRestrictase.keys)[row] 
     var site = listOfAllRestrictaseWithSites[name] 
+0

數據源或綁定? – Willeke

+0

@Willeke - 數據源 – VYT

+0

sender是已打開或關閉的複選框。而不是myCheckbox你應該使用發件人。 – Willeke

回答

2

rowForView的文檔:

返回值

對應於視圖中的行的索引。如果view不是NSTableRowView的實例或NSTableRowView的實例的子視圖,則返回-1。換句話說,如果視圖不在表視圖中,則此方法返回-1。 (請注意,當一行正在被動畫時,此方法也可能返回-1,因爲視圖不再有有效的行)。

聽起來像你可以使用複選框。

您的數據源進行排序並獲得第一列的數據。

相關問題