Аз бих искал да има подклас от 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];
}
Това е по-добре, тъй като различните сегменти сапоказвайки уникални цветове, обаче едва ли бих счел това за приемливо. Искам целият сегмент да бъде запълнен с подходящ цвят за този сегмент и би било хубаво, ако има градиент и засенчване както в първия скрийншот.
Моля да ме уведомите как мога да постигна това.
Благодаря.
Отговори:
4 за отговор № 1Трябва да посочите фиксирана ширина за сегментите.
Тогава вашият код ще работи доста добре (снимка е от моя тестов проект)
И не забравяйте да забраните нюанса
[self.segment.cell setControlTint:NSClearControlTint ];