2017-05-17 104 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) 
}