2011-01-10 2 views
9

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

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

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

+1

Обратите внимание, что 'respectFlipped' должен быть' YES' –

+0

Спасибо за подсказку :) – keegan3d

ответ

4

Разработчик на форумах 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];  
} 
+0

Просто добавив к этому, скорее всего, потому что 'NSPopUpButton' берет имя/изображение из первого пункта меню, у которого не может быть альтернативного изображения. –

Смежные вопросы