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)

这是更好的,因为各个部分显示独特的颜色,但我几乎不认为这是可接受的.我希望用该段的适当颜色填充整个段,如果它具有第一个屏幕截图中的渐变和阴影,那将是很好的.
请让我知道如何实现这一目标.
谢谢.
您需要为段指定固定宽度。

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

并且不要忘记禁用色调
[self.segment.cell setControlTint:NSClearControlTint ];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3450 次 |
| 最近记录: |