我正在尝试找到一种方法来更改所选控制按钮的颜色。这是否可以通过继承 NSSegmentedControl 或 NSSegmentedCell 或任何其他方式来实现?如果是这样,有人可以告诉我路吗?
问问题
1404 次
3 回答
3
我以不同的方式完成了它,没有覆盖,只是使用“假色”过滤器。它并不完美,因为它会以某种方式改变颜色的透明性,但对我来说还可以。
class RLSegmentedControl: NSSegmentedControl {
init() {
super.init(frame: NSZeroRect)
addFilter()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
addFilter()
}
func addFilter() {
let colorFilter = CIFilter(name: "CIFalseColor")!
colorFilter.setDefaults()
colorFilter.setValue(CIColor(cgColor: NSColor.white.cgColor), forKey: "inputColor0")
colorFilter.setValue(CIColor(cgColor: NSColor.black.cgColor), forKey: "inputColor1")
// colorFilter.setValue(CIColor(cgColor: NSColor.yellow.cgColor), forKey: "inputColor0")
// colorFilter.setValue(CIColor(cgColor: NSColor.black.cgColor), forKey: "inputColor1")
self.contentFilters = [colorFilter]
}
}
于 2018-09-18T14:23:21.010 回答
1
您可以继承 NSSegmentedCell e 覆盖 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)
}
于 2018-03-08T18:17:20.370 回答
0
您需要继承 NSSegmentedCell 并覆盖以下方法:
- (NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView
从文档中:
返回接收器在绘制选择突出显示时使用的颜色。
您不应该假设一个单元格一定要使用从 selectedControlColor 返回的值来绘制自己。一个单元格可能希望根据其 controlView 的关键状态等内容使用不同的选择突出显示颜色进行绘制。
于 2017-05-18T14:27:21.887 回答