![](/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.