在 NSTableView 中应用 NSCheckBox 状态

Applying NSCheckBox state in NSTableView

我有一个 NSTableView,它有两行,一行带有复选框,一行带有文本字段,我想应用字典中的复选框状态 NSTableViewDataSource.viewForTableColumn ...

// MARK: - NSTableViewDataSource
func tableView(tableView:NSTableView, viewForTableColumn tableColumn:NSTableColumn?, row:Int) -> NSView?
{
    var cellView:NSTableCellView = tableView.makeViewWithIdentifier(tableColumn!.identifier, owner: self) as! NSTableCellView;
    if (tableColumn!.identifier == "CheckColumn")
    {
        if let themeFlags = getThemeFlagsForCurrentNameType()
        {
            // themeFlags is of type [String:Bool]
            let a = Array(themeFlags);
            let flag:Bool = a[row].1;
            // How to proceed here?
        }
    }
    else if (tableColumn!.identifier == "NameColumn")
    {
        if let d = _themesTableViewData
        {
            let theme = Array(d.keys)[row];
            cellView.textField!.stringValue = theme;
            return cellView;
        }
    }
    return cellView;
}

我遇到的困难是如何将 Bool 标志设置为包裹在 cellView 内的复选框?

您需要创建一个自定义单元格视图并为复选框定义一个 IBOutlet。在 NSTableView 中添加自定义电池后,您可以连接插座。

要在 table 视图中添加自定义单元格,您可以添加普通 table 单元格视图,然后将其 class 设置为子 class。这使您可以访问您定义的出口。

然后您可以通过代码中的自定义单元格视图访问复选框 - 您可能想在 Apple 的 NSTableView 最佳示例之一中查找更多详细信息:developer.apple.com/library/mac/samplecode/TableViewPlayground/

此外,您可能还想查看此答案 逐步解释我上面描述的内容。

基本的 NSTableCellView 没有任何复选框。因此,该 cellView 实例的真实 class 必须以某种方式成为您自定义 NSTableCellView class 的实例。在那里,你应该有(或者如果你没有的话)对那个复选框的引用(可能是一个 NSButton )。

因此在您的代码中,您应该首先确保从 tableView.makeViewWithIdentifier(... 获得的实例是您的自定义 class 的实例。在您检索标志的位置,将您的 cellView 实例转换为自定义 class,访问复选按钮,并设置其状态。