我有基于视图的NSTableView
和自定义NSTextField
子类实例来绘制行标签。
根据是否选择了一行(突出显示),我想更改自定义文本字段的背景颜色。
我如何知道我的文本字段drawRect:(NSRect)dirtyRect
中是否选择了父表行?
文本字段甚至不知道它是表视图的一部分(并且不应该)。
如果我将普通NSTextField
放入表格视图中,它会根据行选择状态自动更改其字体颜色,因此必须以某种方式使文本字段知道它是选中/突出显示还是现在。
答案 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
// ...
}