簡體   English   中英

如何將NSTableCellView Checkbox切換事件與其數據源相關聯?

[英]How do I associate a NSTableCellView Checkbox toggle-event with its data source?

環境:基於視圖的NSTableView WITHOUT綁定。
問題:將列的復選框動作映射到其數據源
(即,我如何實時知道復選框事件發生在哪一行?)。

在不使用IB綁定的情況下,如何將其相應NSTableView行中的任何特定NSButton / Checkbox操作與其數據源相關聯?

在此處輸入圖片說明

我希望能夠使用其UI狀態更新復選框的相應數據數組(在數據源中選中復選框-> 1)。

也就是說,用其1:1表條目映射結構或閉包的數組。 因此,單擊“選擇” /行將用數據源數組更新其各自的布爾標志。

以下代碼段顯示了如何填充UI:

typealias GeoTuple = (geoDesc:String,geoSelected:Int)
var geoList = [GeoTuple]()


func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {

    var cellView:NSTableCellView?
    let cellID = tableColumn?.identifier

    guard nil != cellID else {
        cellView = NSTableCellView()
        return cellView
    }

    cellView = (tableView.makeViewWithIdentifier(cellID!, owner: self) as? NSTableCellView)

    guard nil != cellView else {
        print("{ODYInitializePricingProductViewController} *** NO CELL VIEW GENERATED *** \n Check cell identifiers.")
        return nil
    }

    let currentTableColumn = ODYInitPricingTableColumnIdentifier(rawValue:cellView!.identifier!)

    switch currentTableColumn! {
...
   case .geoSelectFlag:
        if row < geoList.count  {
            if let selectButton = cellView?.viewWithTag(1) as? NSButton {
                selectButton.integerValue = geoList[row].geoSelected
            }
        }
  ...
  return cellView
}

問題:如何捕獲特定的NSButton-Check切換事件,並將該事件關聯/映射到其各自的數據源:geoList?

將復選框按鈕的目標連接到表視圖委托,並將其動作設置為某些動作方法的選擇器。

tableView(_:viewForTableColumn:row:)編程方式設置目標和操作可能是最簡單的。 由於表列中的單元格視圖層次實際上位於子頂點中,因此將它們連接到NIB或情節提要場景中的對象可能會出現問題。

在action方法中,您可以通過在表上調用rowForView()並傳遞該action方法接收的sender作為參數來查找行。 您還可以檢查發送者的state以確定數據模型的新值是打開還是關閉。

func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? { ...
...
case .geoSelectFlag:
    if row < geoList.count  {
        if let selectButton = cellView?.viewWithTag(1) as? NSButton {
            selectButton.integerValue = geoList[row].geoSelected
            selectButton.target = self
            selectButton.action = "checkBoxAction:"
        }
    }
...
}

func checkBoxAction(sender:NSButton) {

}

(lldb)po self.geoTableView.rowForView(sender)3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM