NSTableViewCell setSelected?

时间:2015-10-21 01:23:54

标签: storyboard swift2 nstableview osx-elcapitan nstablecellview

当我在tableView上选择该单元格时,如何在 NSViewController NSTableViewCell 之间进行通信? 在iOS上你可以使用setSelected,但在OSX中它完全不同。 NSTableCellView类没有这样的功能。我可能会遗漏一些简单的东西。我该如何与那个细胞交谈?我有一个自定义类单元格,在我的tableView控制器上,我得到了:

func tableView(tableView: NSTableView, shouldSelectRow row: Int) -> Bool {

    let previousSelected = NSIndexSet(index: selectedRow)
    selectedRow = row
    let indset = NSIndexSet(index: row)

    // animate row expansion
    self.tableView.noteHeightOfRowsWithIndexesChanged(indset)

    // animate back the previously selected
    self.tableView.noteHeightOfRowsWithIndexesChanged(previousSelected)
    return true
}

我也有Row的高度......

func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
    if row == selectedRow{
        return 90
    }else{
        return 40
    }
}

我要做的是让我的手机知道它已被选中,因此它可以在选择时显示不同的东西。任何人?

2 个答案:

答案 0 :(得分:2)

选择不对单元格进行操作,它对行进行操作。 NSTableRowView具有selected属性。它通常负责使用drawSelectionInRect()方法绘制表行的选定外观。

您的细胞究竟是如何根据其是否被选中来改变其行为或外观?你确定不应该由行来完成吗?也许您应该使用NSTableRowView的自定义子类。

如果必须,您可以从单元格视图中找到行视图。一种方法是假设单元格的超级视图是行视图,当它不是nil时应该是它。另一种方法是询问表格查看单元格用于rowForView(self)的行,然后使用rowViewAtRow(_:makeIfNecessary:)向表视图询问行视图。

答案 1 :(得分:1)

$match->opponent->name似乎没有NSTableCellView属性。也许你可以将它子类化并添加这样的属性。

然后,实现委托方法:

selected

...如果您返回optional func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool (即应选择该行),请将您刚定义的相应单元格的true属性设置为selected

如果您希望单元格在选中时执行某些操作,请按以下方式定义属性:

true