![](/img/trans.png)
[英]How do I access an ImageView within an NSTableCellView in Swift?
[英]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.