2011-01-10 20 views
9

Quiero crear un NSPopUpButton con una imagen activa personalizada. Tengo dos imágenes, una para inactivo y otra para activo. En el constructor de interfaces, configuro la Imagen y Alt. Imagen para NSPopUpButton. La imagen se muestra correctamente, pero cuando hago clic en el botón, muestra el estado estándar del botón oscuro en lugar del Alt. Imagen.NSPopUpButton Active Image

Aquí está una captura de pantalla del panel de constructor de interfaces: http://cl.ly/0D2c0Y2y0f1Z462d311X

¿Cómo puedo configurar el NSPopUpButton para mostrar mi imagen alternativa cuando se hace clic en él?

+1

Tenga en cuenta que 'respectFlipped' debe ser' SÍ' –

+0

Gracias por la sugerencia :) – keegan3d

Respuesta

4

Un desarrollador de los foros de Apple Dev me señaló en la dirección correcta: https://devforums.apple.com/message/364824

Esto es lo que se me ocurrió como una subclase de NSPopUpButtonCell que respeta la imagen alternativa del 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

Simplemente agregando a esto, es probable porque 'NSPopUpButton' toma el nombre/imagen del primer elemento del menú, que no puede tener una imagen alternativa. –