在NSTableView中应用NSCheckBox状态

时间:2015-04-30 07:39:55

标签: macos cocoa swift 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中的复选框?

2 个答案:

答案 0 :(得分:2)

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

要在表视图中添加自定义单元格,可以添加普通表格单元格视图,然后将其类设置为子类。这使您可以访问已定义的插座。

然后,您可以通过代码中的自定义单元格视图访问该复选框 - 您可能希望在Apple的NSTableView上找到更多详细信息:developer.apple.com/library/mac/samplecode/TableViewPlayground/

另外,您可能需要另外检查此答案Create a custom cell in a NSTableView,然后按照上述步骤进行解释。

答案 1 :(得分:1)

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

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