【问题标题】:NSTableViewCell setSelected?NSTableViewCell setSelected?
【发布时间】:2015-10-21 01:23:54
【问题描述】:

当我在 tableView 上选择该单元格时,如何在 NSViewControllerNSTableViewCell 之间进行通信? 在 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
    }
}

我要做的是让我的单元格知道它已被选中,因此它可以在选中时显示不同的内容。有人吗?

【问题讨论】:

  • 您想以编程方式选择一个单元格(而不是通过用户发起的操作)?
  • 没有。我只想让 Cell 类 - NSTableCellView 知道它何时被选中。我不确定它是否是让单元格知道它被选中的 ViewController,或者单元格类中是否有一个在单元格被选中时运行的方法以及该方法是什么

标签: storyboard swift2 nstableview osx-elcapitan nstablecellview


【解决方案1】:

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

您的单元格究竟如何根据它是否被选中而改变其行为或外观?您确定不应该由行来代替吗?也许您应该使用NSTableRowView 的自定义子类。

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

【讨论】:

  • 完美。有用!我得到了行,然后得到了单元格,然后我可以通过添加一个 var:selected:Bool 让单元格类知道它已被选中,就像提到的@NicolasMiari 一样。谢谢你们!
【解决方案2】:

NSTableCellView 似乎没有selected 属性。也许您可以将其子类化并添加此类属性。

然后,实现委托方法:

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

...在您返回true(即应选择该行)的情况下,将您刚刚定义的相应单元格的selected属性设置为true

如果您希望单元格在被选中时执行某些操作,请像这样定义您的属性:

var selected:Bool {
    didSet {
        if selected {
            // Act accordingly...
        }
    }
}

【讨论】:

    猜你喜欢
    • 2012-07-20
    • 1970-01-01
    • 2012-07-08
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多