我想要一个 NSSegmentedControl 的子类,其中各个段的颜色不同。我已经尝试子类化 NSSegmentedControl 并添加以下代码:
- (void)drawRect:(NSRect)dirtyRect
{
NSColor *color = [NSColor redColor];
[color setFill];
NSRectFill(dirtyRect);
[super drawRect:dirtyRect];
}
这看起来很接近,除了 1. 它将整个分段控件着色为相同的颜色,在本例中为红色,以及 2. 边缘有一点颜色溢出。
我还尝试继承 NSSegmentedCell 并添加:
- (void)drawSegment:(NSInteger)segment inFrame:(NSRect)frame withView:(NSView *)controlView
{
NSColor *color;
switch (segment) {
case 0:
color = [NSColor redColor];
break;
case 1:
color = [NSColor blueColor];
break;
case 2:
color = [NSColor greenColor];
break;
case 3:
color = [NSColor orangeColor];
break;
default:
break;
}
[color setFill];
NSRectFill(frame);
[super drawSegment:segment inFrame:frame withView:controlView];
}
这更好,因为各个部分都显示了独特的颜色,但我几乎不认为这是可以接受的。我希望整个片段都用适合该片段的颜色填充,如果它具有第一个屏幕截图中的渐变和阴影,那就太好了。
请告诉我如何实现这一目标。
谢谢。
最佳答案
您需要为段指定固定宽度。
那么你的代码将工作得很好(屏幕截图来 self 的测试项目)
不要忘记禁用色调
[self.segment.cell setControlTint:NSClearControlTint ];
关于objective-c - NSSegmentedControl 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9952308/