Да, как уже упоминалось ранее, вы должны нарисовать это самостоятельно.Я использую AppKit NSDrawThreePartImage (…) для рисования, а также включаю проверки для использования внешнего вида пользовательского элемента управления (синего или графитового). Чтобы получить изображения, я просто взял их со скриншота (если кто-нибудь знает лучший способ, добавьте комментарий.) Вот фрагмент drawRect моего MenuItemView:
// draw the highlight gradient
if ([[self menuItem] isHighlighted]) {
NSInteger tint = [[NSUserDefaults standardUserDefaults] integerForKey:@"AppleAquaColorVariant"];
NSImage *image = (AppleAquaColorGraphite == tint) ? menuItemFillGray : menuItemFillBlue;
NSDrawThreePartImage(dirtyRect, nil, image, nil, NO,
NSCompositeSourceOver, 1.0, [self isFlipped]);
}
else if ([self backgroundColor]) {
[[self backgroundColor] set];
NSRectFill(dirtyRect);
}
РЕДАКТИРОВАТЬ
Должны были определить это:
enum AppleAquaColorVariant {
AppleAquaColorBlue = 1,
AppleAquaColorGraphite = 6,
};
Они соответствуютдва варианта внешнего вида в Системных настройках.Кроме того, menuItemFillGray и menuItemFillBlue - это просто NSImages стандартных градиентов заполнения пунктов меню.