2011-01-05 16 views
13

I popover sono molto utilizzati nelle app per iPad e mi piacciono molto. Ora penso a come questo potrebbe essere implementato in AppKit su mac perché ne ho un caso d'uso.Possiamo avere popover nelle app Mac Cocoa?

Ho bisogno di una sottoclasse NSWindow per realizzare la sovrapposizione o posso anche usare una vista normale?

risposta

12

Se ho capito bene, vuoi qualcosa come MAAttachedWindow (di Matt Gemmell), che è open source.

MAAttachedWindow

+0

+1 per questo. Ha funzionato bene per me, ed è anche possibile portarlo su iPhone con qualche rinominazione. –

+0

Grazie mille, lo controllerò e segnerò la tua risposta come accettata se funziona per me. – brutella

+0

Funziona come un fascino;) – brutella

18

Secondo Apple's Developer Documentation, è possibile utilizzare costruito in popovers su OS X con il built-in classe NSPopover:

partire in OS X v10.7, AppKit fornisce il supporto per popovers attraverso il Classe NSPopover. Un popover fornisce un mezzo per visualizzare contenuti aggiuntivi relativi ai contenuti esistenti sullo schermo. La vista che contiene il contenuto esistente, da cui deriva il popover, viene indicata in questo contesto come una vista di posizionamento. Si usa un'ancora per esprimere la relazione tra un popover e la sua vista di posizionamento.

Ecco un collegamento allo NSPopover class. Puoi anche vedere un esempio di NSPopovers utilizzati nell'app Calendar (10.7+) e nell'app Safari (10.8+). L'immagine seguente raffigura un popover in app calendario (a sinistra) e Safari (a destra):

Use of NSPopover in Mac OS X


Ecco come impostare un NSPopover, è molto semplice e può essere fatto per lo più in Interface Builder .

  1. Aggiungi un oggetto NSPopover al tuo XIB nel generatore di interfacce. Questo creerà NSPopover e il suo controller di visualizzazione.
  2. Successivamente, trascinare un NSView personalizzato nel XIB tramite il generatore di interfacce. Questa sarà la vista per il controller della vista popover
  3. Personalizza la tua NSView con tutti i controlli necessari in popover
  4. Nel file di intestazione (h) aggiungere le seguenti due righe di codice:

    @property (assign) IBOutlet NSPopover *popover; 
    - (IBAction)showPopover:(id)sender; 
    

    Non dimenticare di collegare sia la presa che l'azione alla tua interfaccia.

  5. Nell'implementazione, sintetizzare il popover e aggiungere il metodo per showPopover
  6. Nel metodo showPopover, aggiungere questa riga per mostrare la popover:

    [[self popover] showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxYEdge]; 
    

E 'a voi per la figura fuori come liquidare il popover; perché che divertimento copia/incolla? È possibile farlo manualmente (suggerimento: provare a utilizzare close) o modificare la proprietà behavior e fare in modo che il sistema lo faccia (vedere la modifica seguente).

Buona fortuna, spero che questo aiuti!


Modifica

Come notato da David in his comment:

Un'altra possibilità per respingere la popover è quello di impostare il comportamento di Transient. Ciò consente all'utente di fare clic ovunque fuori dal popover per farlo scomparire

La proprietà di comportamento di un popover imposta come appare e scompare. Ci sono tre comportamenti:

  • NSPopoverBehaviorApplicationDefined - (Default) La vostra applicazione deve chiudere la popover sé
  • NSPopoverBehaviorTransient - La popover è chiuso quando qualsiasi elemento di interfaccia è interagito con al di fuori del popover
  • NSPopoverBehaviorSemitransient - Il popover è chiuso quando qualsiasi elemento dell'interfaccia nella vista di presentazione del popover viene interagito con l'esterno del popover.

Maggiori informazioni su questo in Apple's Documentation.

+2

+1 Ottima risposta - bella modifica. Un'altra possibilità per respingere il popover è impostarla su Behavior to Transient. Ciò consente all'utente di fare clic ovunque al di fuori del popover per farlo sparire. post scriptum Ricordarsi di fare 2 connessioni (presa e azione). – David

Problemi correlati