表视图中的自定义NSTextField:如何知道是否选择了行来更改背景颜色?

时间:2012-01-18 09:49:12

标签: cocoa nstableview nstextfield

我有基于视图的NSTableView和自定义NSTextField子类实例来绘制行标签。

根据是否选择了一行(突出显示),我想更改自定义文本字段的背景颜色。

我如何知道我的文本字段drawRect:(NSRect)dirtyRect中是否选择了父表行?

文本字段甚至不知道它是表视图的一部分(并且不应该)。

如果我将普通NSTextField放入表格视图中,它会根据行选择状态自动更改其字体颜色,因此必须以某种方式使文本字段知道它是选中/突出显示还是现在。

1 个答案:

答案 0 :(得分:0)

表视图是单元视图中视图的父视图。 因此,您可以在drawRect方法中迭代视图层次结构以查找父表视图。 并使用它检查是否选择了包含自定义NSTextField的行。

override public func drawRect(dirtyRect: NSRect) {
    var backgroundColor = NSColor.controlColor() //Replace by the non selected color
    var parentView = superview
    while parentView != nil {
        if let tableView = parentView as? NSTableView {
            let row = tableView.rowForView(self)
            if tableView.isRowSelected(row) {
                backgroundColor = NSColor.alternateSelectedControlColor() //Replace by the selected background color
            }
            break
        }
        parentView = parentView?.superview
    }
    //Perform the drawing with the backgroundColor
   // ...
}