2011-11-15 14 views
8

Quiero mostrar un NSPopover desde un botón NSToolbarItem en la barra de herramientas.
(es decir, ubicado debajo del botón).Mostrar NSPopover desde el botón NSToolbarItem

Idealmente, quiero pasar el NSView del botón al popover para colocarlo.
Mi pregunta es, ¿cómo obtengo el NSView del NSToolbarItem?

[toolbarbutton view] siempre devuelve nil.

Respuesta

2

Puede enviar la acción directamente desde NSButton incluido en NSToolbarItem (que es lo que generalmente debe hacer de todos modos, considere controles segmentados, donde cada segmento tiene su propio objetivo/acción), y eso hará el truco.

+0

Gracias - Voy a intentarlo. –

2

En lugar de obtener la vista desde el emisor IBAction, conectar un IBOutlet directamente al elemento de barra de herramientas y el uso que para obtener la vista relativa:

En el archivo de cabecera:

@property (weak) IBOutlet NSToolbarItem *theToolbarItem; 
@property (weak) IBOutlet NSPopover *thePopover; 

En su aplicación archivo, para mostrar la popover:

[self.thePopover showRelativeToRect:[[self.theToolbarItem view] bounds] ofView:[self.theToolbarItem view] preferredEdge:NSMinYEdge]; 

Esto también funciona para mostrar ventanas emergentes de selección de elementos de menú en el interior de un elemento de la barra de herramientas.

0

Mientras que logró que el Popover se demostró usando el enfoque mencionado por Stuart Tevendale, lo hice a tener problemas cuando trataba de validar (activar/desactivar) la NSToolbarItems utilizando el NSToolbarDelegate:

-(BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem { 
    BOOL enable = YES; 

    NSString *identifier = [toolbarItem itemIdentifier]; 

    // This does never get called because I am using a button inside a custom `NSToolbarItem` 
    if ([identifier isEqualToString:@"Popover"]) { 
     return [self someValidationMechanism]; 
    } 

    // For this the validation works when I am using a standard `NSToolbarItem` 
    else if ([identifier isEqualToString:@"StandardToolbarItem"]){ 
     return [self someOtherValidationMechanism]; 
    } 

    return enable; 
} 

Así Aconsejaría no mostrar un Popover de NSToolbarItem. Una alternativa podría ser mostrar una Hoja de Página: How to show a NSPanel as a sheet

Cuestiones relacionadas