2011-01-05 14 views
13

Los Popovers se usan mucho en las aplicaciones de iPad y realmente me gustan. Ahora pienso en cómo esto podría implementarse en AppKit en el mac porque tengo un caso de uso para él.¿Podemos tener exitazos en las aplicaciones Mac Cocoa?

¿Necesito una subclase NSWindow para lograr la superposición o también podría usar una vista normal?

Respuesta

12

Si te entendí correctamente, quieres algo como MAAttachedWindow (por Matt Gemmell), que es de código abierto.

MAAttachedWindow

+0

+1 para esto. Me ha funcionado bien, y también es posible llevarlo al iPhone con un cambio de nombre. –

+0

Muchas gracias, lo verificaré y marcaré su respuesta como aceptada si me funciona. – brutella

+0

Funciona como un encanto;) – brutella

18

Según Apple's Developer Documentation, puede utilizar construido en panecillos de OS X con la clase incorporada NSPopover:

A partir de OS X v10.7, AppKit proporciona soporte para los panecillos por medio de la Clase NSPopover. Un popover proporciona un medio para mostrar contenido adicional relacionado con el contenido existente en la pantalla. La vista que contiene el contenido existente, a partir de la cual surge el popover, se denomina en este contexto como una vista de posicionamiento. Utiliza un anclaje para expresar la relación entre un popover y su vista de posicionamiento.

Aquí hay un enlace al NSPopover class. También puede ver un ejemplo de NSPopovers utilizados en la aplicación Calendario (10.7+) y la aplicación Safari (10.8+). La imagen siguiente muestra un popover en la aplicación Calendario (izquierda) y Safari (derecha):

Use of NSPopover in Mac OS X


continuación se describe cómo configurar una NSPopover, es muy simple y se puede hacer sobre todo en constructor de interfaces .

  1. Agregue un elemento de NSPopover a su XIB en el generador de interfaz. Esto creará el NSPopover y su controlador de vista.
  2. A continuación, arrastre un NSView personalizado en su XIB a través del constructor de interfaz. Esta será la vista para el controlador de vista popover
  3. Personaliza tu NSView con los controles que necesita en su popover
  4. En el archivo de cabecera (.h) añadir las siguientes dos líneas de código:

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

    No olvide conectar la salida y la acción a su interfaz.

  5. En su aplicación, sintetizar el popover y añadir el método para showPopover
  6. En el método showPopover, agregue esta línea para mostrar el popover:

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

Es a usted a la figura cómo descartar el popover; porque qué divertido es copiar/pegar? Puede hacerlo manualmente (sugerencia: intente usar close) o cambie la propiedad behavior y haga que el sistema lo haga (vea la edición a continuación).

¡Buena suerte, espero que esto ayude!


Editar

Como señaló David in his comment:

Otra posibilidad para despedir el popover es fijar su comportamiento a transitoria. Esto permite al usuario hacer clic en cualquier lugar fuera del popover para que desaparezca

La propiedad de comportamiento de un popover establece cómo aparece y desaparece. Existen tres comportamientos:

  • NSPopoverBehaviorApplicationDefined - (predeterminado) Su aplicación debe cerrar la popover sí
  • NSPopoverBehaviorTransient - El popover se cierra cuando cualquier elemento de la interfaz se interactuó con fuera del popover
  • NSPopoverBehaviorSemitransient - El popover es cerrado cuando cualquier elemento de la interfaz en la vista de presentación del popover se interactúa con fuera del popover.

Lea más acerca de esto en Apple's Documentation.

+2

+1 Gran respuesta - buena edición. Otra posibilidad para descartar el popover es establecer su comportamiento a transitorio. Esto permite al usuario hacer clic en cualquier lugar fuera del popover para que desaparezca. PD. Recuerde hacer 2 conexiones (salida y acción). – David

Cuestiones relacionadas