2017-05-17 66 views

回答

0

您需要继承NSSegmentedCell并且覆盖下列方法:

- (NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 

从文档:

返回绘制高亮选择时,接收器使用的颜色。

你不应该假设一个单元格必然要用selectedControlColor返回的值来绘制自己。单元格可能希望使用不同的选择高亮颜色进行绘制,具体取决于诸如controlView的关键状态之类的内容。

+0

我已经尝试过这一点。这个NSCell方法在NSSegmentedCell中从来没有被调用过,在文档中已经提到了一些东西 - “你不应该假设一个单元格会想要用selectedControlColor返回的值来绘制自己,单元格可能希望用不同的选择高亮颜色取决于诸如controlView的关键状态等事情。“_ – memis

+0

我会为此提交一个错误报告。该文件说,你可以使用这种方法来改变突出显示的颜色,但没有说它没有被使用。唯一的解决方案似乎是重写-drawInteriorWithFrame:inView:并自己处理所有绘图。 – floschliep

0

你也可以继承NSSegmentedCellË覆盖drawSegment方法:

override func drawSegment(_ segment: Int, inFrame frame: NSRect, with controlView: NSView) { 
    var color: NSColor 
    if selectedSegment == segment { 
     color = NSColor.red 
    } else { 
     color = NSColor.white 
    } 
    color.setFill() 
    frame.fill() 
    super.drawSegment(segment, inFrame: frame, with: controlView) 
}