NSSegmentedControl颜色

Jas*_*ell 8 macos user-interface cocoa objective-c

我想要一个NSSegmentedControl的子类,其中各个段是不同的颜色.我已经尝试了子类化NSSegmentedControl并添加以下代码:

- (void)drawRect:(NSRect)dirtyRect
{
    NSColor *color = [NSColor redColor];
    [color setFill];
    NSRectFill(dirtyRect);
    [super drawRect:dirtyRect];
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

看起来很接近,除了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];
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这是更好的,因为各个部分显示独特的颜色,但我几乎不认为这是可接受的.我希望用该段的适当颜色填充整个段,如果它具有第一个屏幕截图中的渐变和阴影,那将是很好的.

请让我知道如何实现这一目标.

谢谢.

ser*_*yne 6

您需要为段指定固定宽度。

在此处输入图片说明

然后你的代码会工作得很好(截图来自我的测试项目)

在此处输入图片说明

并且不要忘记禁用色调

 [self.segment.cell setControlTint:NSClearControlTint ];
Run Code Online (Sandbox Code Playgroud)