首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将NSTableCellView复选框切换事件与其数据源关联?

如何将NSTableCellView复选框切换事件与其数据源关联?
EN

Stack Overflow用户
提问于 2016-01-07 20:36:44
回答 2查看 836关注 0票数 0

环境:没有绑定的基于视图的NSTableView。

问题:映射列到其数据源的复选框操作

(也就是说,如何实时知道复选框事件发生在哪一行?)。

在不使用IB绑定的情况下,如何将其各自NSTableView行中的任何特定NSButton/复选框操作与其数据源关联?

I希望能够用UI状态更新复选框的各个数据数组(选中数据源中的-> 1框).

也就是说,用它们的1:1表条目映射一个结构或闭包数组。因此,单击“select”/row使用数据源数组更新其各自的布尔标志。

下面的代码片段显示了如何填充UI:

代码语言:javascript
运行
复制
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?

EN

回答 2

Stack Overflow用户

发布于 2016-01-07 21:09:58

将复选框按钮的目标连接到表视图委托,并将其操作设置为某些操作方法的选择器。

tableView(_:viewForTableColumn:row:)中以编程方式设置目标和操作可能是最简单的。由于表列中的单元格视图层次结构实际上在子NIB中,将它们连接到NIB或故事板场景中的对象可能会有问题。

在action方法中,可以通过调用表上的rowForView()来查找行,并将操作方法接收的sender作为参数传递。还可以检查发件人的state,以确定数据模型的新值是打开还是关闭。

票数 1
EN

Stack Overflow用户

发布于 2016-01-07 21:59:54

代码语言:javascript
运行
复制
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:"
        }
    }
...
}

代码语言:javascript
运行
复制
func checkBoxAction(sender:NSButton) {

}

(lldb) po self.geoTableView.rowForView(发件人)3

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34664673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档