Objective c 分节控制颜色

Objective c 分节控制颜色,objective-c,macos,cocoa,user-interface,Objective C,Macos,Cocoa,User Interface,我想要一个NSSegmentedControl的子类,其中不同的段是不同的颜色。我尝试将NSSegmentedControl子类化并添加以下代码: - (void)drawRect:(NSRect)dirtyRect { NSColor *color = [NSColor redColor]; [color setFill]; NSRectFill(dirtyRect); [super drawRect:dirtyRect]; } 看起来很接近,除了1。它将整

我想要一个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.segment.cell setControlTint:NSClearControlTint ];

幸运的是,分段控件的当前实现在其图形中使用半透明。这允许您在控件下方绘制的红色发光。这可能会随着Mac OS X的任何更新而改变。要正确做到这一点,您应该创建自己的NSView子类,在drawRect:中完成所有绘图,而不是尝试着色现有控件。噢,Jon,可能与您所说的有关,实际上有大约六种不同的样式。我想知道其他的风格会如何影响这一点。