2011-11-15 13 views
8

Desidero mostrare un NSPopover da un pulsantenella barra degli strumenti.
(cioè posizionato sotto il pulsante).Mostra NSPopover dal pulsante NSToolbarItem

Idealmente, voglio passare il NSView del pulsante al popover per posizionarlo.
La mia domanda è, come ottengo ildel NSToolbarItem?

[toolbarbutton view] restituisce sempre zero.

risposta

2

È possibile inviare l'azione direttamente dallo NSButton incluso nello NSToolbarItem (che è ciò che generalmente si dovrebbe fare in ogni caso, considerare i controlli segmentati, in cui ogni segmento ha il proprio target/azione), e questo farà il trucco.

+0

Grazie - Farò una prova. –

2

Invece di ottenere la vista dal mittente IBAction, collegare un IBOutlet direttamente alla voce della barra degli strumenti e l'uso che per ottenere la visualizzazione relativa:

Nel file di intestazione:

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

Nell'implementazione il file, per mostrare la popover:

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

Ciò funzionerà anche per mostrare i popup di selezione delle voci di menu all'interno di una voce di barra degli strumenti.

0

Mentre mi hanno raggiunto che il Popover è stata dimostrata utilizzando l'approccio di cui parla Stuart Tevendale, ho incontrato problemi quando ho cercato di convalidare (abilitazione/disabilitazione) la NSToolbarItems utilizzando il 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; 
} 

Così Vorrei consigliare di non visualizzare un Popover da NSToolbarItem. Un'alternativa potrebbe essere quella di mostrare un foglio di pagina: How to show a NSPanel as a sheet

Problemi correlati