/ / NSSegmentedControl Цветове - цел-c, macos, какао, потребителски интерфейс

NSSegmentedControl Colors - цел-c, мако, какао, потребителски интерфейс

Аз бих искал да има подклас от 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 ];