在基于视图的NSTableView中,我有一个NSTableCellView的子类。
我想更改所选行的cellView的文本颜色。
class CellView: NSTableCellView {
override var backgroundStyle: NSBackgroundStyle {
set {
super.backgroundStyle = newValue
self.udpateSelectionHighlight()
}
get {
return super.backgroundStyle;
}
}
func udpateSelectionHighlight() {
if ( self.backgroundStyle == NSBackgroundStyle.Dark ) {
self.textField?.textColor = NSColor.whiteColor()
} else if( self.backgroundStyle == NSBackgroundStyle.Light ) {
self.textField?.textColor = NSColor.blackColor()
}
}
}
问题是所有的cellViews都是用NSBackgroundStyle.Light设置的。
我的选择是在NSTableRowView的子类中自定义绘制的。
class RowView: NSTableRowView {
override func drawSelectionInRect(dirtyRect: NSRect) {
if ( self.selectionHighlightStyle != NSTableViewSelectionHighlightStyle.None ) {
var selectionRect = NSInsetRect(self.bounds, 0, 2.5)
NSColor( fromHexString: "d1d1d1" ).setFill()
var selectionPath = NSBezierPath(
roundedRect: selectionRect,
xRadius: 10,
yRadius: 60
)
// ...
selectionPath.fill()
}
}
// ...
}
为什么选中的行cellView的backgroundStyle属性不是设置为Dark?
感谢。
答案 0 :(得分:5)
虽然我仍然不知道为什么对于TableView / RowView在所选行的cellView上设置深色背景,我发现这是一个可接受的解决方法:
class CellView: NSTableCellView {
override var backgroundStyle: NSBackgroundStyle {
set {
if let rowView = self.superview as? NSTableRowView {
super.backgroundStyle = rowView.selected ? NSBackgroundStyle.Dark : NSBackgroundStyle.Light
} else {
super.backgroundStyle = newValue
}
self.udpateSelectionHighlight()
}
get {
return super.backgroundStyle;
}
}
func udpateSelectionHighlight() {
if ( self.backgroundStyle == NSBackgroundStyle.Dark ) {
self.textField?.textColor = NSColor.whiteColor()
} else {
self.textField?.textColor = NSColor.blackColor()
}
}
}