NSPopUpButton Active Image - PullRequest
       4

NSPopUpButton Active Image

9 голосов
/ 10 января 2011

Я хочу создать NSPopUpButton с пользовательским активным изображением.У меня есть два изображения, одно для неактивных, а другое для активных.В конструкторе интерфейсов я установил Image и Alt.Изображение для NSPopUpButton.Изображение отображается правильно, но когда я нажимаю на кнопку, оно отображает стандартное состояние темной кнопки вместо Alt.Изображение.

Вот снимок экрана панели конструктора интерфейса: http://cl.ly/0D2c0Y2y0f1Z462d311X

Как настроить кнопку NSPopUpButton для отображения моего альтернативного изображения при нажатии на него?

1 Ответ

5 голосов
/ 21 февраля 2011

Разработчик с форумов Apple Dev указал мне правильное направление: https://devforums.apple.com/message/364824

Вот что я придумал как подкласс NSPopUpButtonCell, который уважает альтернативное изображение от IB:

- (void)drawImageWithFrame:(NSRect)cellRect inView:(NSView *)controlView{
    NSImage *image = self.image;
    if([self isHighlighted] && self.alternateImage){
        image = self.alternateImage;
    }

    //TODO: respect -(NSCellImagePosition)imagePosition
    NSRect imageRect = NSZeroRect;
    imageRect.origin.y = (CGFloat)round(cellRect.size.height*0.5f-image.size.height*0.5f);
    imageRect.origin.x = (CGFloat)round(cellRect.size.width*0.5f-image.size.width*0.5f);
    imageRect.size = image.size;

    [image drawInRect:imageRect
                 fromRect:NSZeroRect
                operation:NSCompositeSourceOver 
                 fraction:1.0f 
           respectFlipped:YES 
                    hints:nil];    
}
...