2011-01-10 11 views
9

Chcę utworzyć przycisk NSPopUp z niestandardowym aktywnym obrazem. Mam dwa obrazy, jeden dla nieaktywnego, a drugi dla aktywnego. W narzędziu do budowania interfejsu ustawiam Image i Alt. Obraz dla NSPopUpButton. Obraz jest wyświetlany poprawnie, ale po kliknięciu przycisku wyświetla standardowy stan ciemnego przycisku zamiast Alt. Obraz.NSPopUpButton Active Image

Oto zrzut ekranu z panelu interfejsu konstruktora: http://cl.ly/0D2c0Y2y0f1Z462d311X

Jak mogę skonfigurować NSPopUpButton wyświetlać mój alternatywny obraz, gdy jest kliknięty?

+1

Należy pamiętać, że "respectFlipped" powinno brzmieć "TAK" –

+0

Dzięki za podpowiedź :) – keegan3d

Odpowiedz

4

Programista z forów firmy Apple Dev wskazał mnie we właściwym kierunku: https://devforums.apple.com/message/364824

Oto co wymyśliłem jako podklasa NSPopUpButtonCell że szanuje obraz alternatywny z 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

Po prostu dodanie do tego, jest to prawdopodobnie dlatego, że 'NSPopUpButton' przyjmuje nazwę/obraz z pierwszego elementu menu, który nie może mieć alternatywnego obrazu. –