Trabajo con ventanas de interfaz en el cacao

Tal vez el elemento más importante de cualquier aplicación basada en GUI es la ventana. De hecho, es tan importante que los chicos de Redmond lo usaron para nombrar a su sistema operativo. Las ventanas de una aplicación son como pedazos de papel que se utiliza para recoger ideas, información de la pantalla, y la entrada de registro.

Ventanas en Cocoa son igualmente importantes. Mac OS X sigue utilizando la ventana tradiciones finas que hicieron el Mac OS famosa. Al mismo tiempo, se basa en Cocoa y mejora las ideas del pasado con nuevas e interesantes características.

Debido a que las ventanas son la base de casi todas las interfaces, que va a utilizar con frecuencia. Algunas de las funciones más comunes que usted va a realizar incluyen lo siguiente:

  • Apertura y cierre de ventanas
  • Mover ventanas
  • Adición de ventanas para el menú de Windows

En este artículo, usted descubrirá cómo llevar a cabo todas estas tareas y mucho más.

Abrir y cerrar una ventana

Cuando se trabaja con ventanas en sus proyectos de cacao, se le suele usar Interface Builder para diseñarlas. Por otra parte, si se deja una ventana abierta en Interface Builder cuando se está diseñando la interfaz, aparece esa ventana voluntad cuando su aplicación se ejecuta. Por lo tanto, a menudo es necesario emitir un comando para abrir una ventana.

Cerrar una ventana es una cuestión simple:

[thewindow cerca];

Cuando se cierra una ventana de esta manera, la ventana se ha ido. Sus contenidos se han ido de la memoria. No es más. Eso significa que para ver la ventana de nuevo, usted tiene que abrir un nuevo objeto ventana.

Ocultar y mostrar una ventana

Si prefiere mantener una ventana alrededor en lugar de eliminarlo de la memoria, debe ocultarlo en vez de cerrarlo. Ocultar una ventana también es una tarea fácil de realizar. Por ejemplo, suponga que tiene una salida (llamado thewindow) como parte de su clase controlador. La salida representa una ventana en su interfaz.

Para ocultar la ventana, un método HideWindow podría tener este aspecto:

- (IBAction) HideWindow: (id) del remitente
{
[thewindow orderOut: remitente] -
}

El método orderOut de la clase NSWindow esconde una ventana de la vista. Todavía existe en memoria- simplemente no es visible. Para saber si una ventana es visible, se puede comprobar el valor de retorno del método isVisible:

- (IBAction) HideWindow: (id) del remitente
{
si ([thewindow isVisible])
[thewindow orderOut: remitente] -
}

Para hacer que la ventana aparecerá de nuevo, sólo tiene que utilizar el método orderFront:


- (IBAction) ShowWindow: (id) del remitente
{
[thewindow orderFront: remitente] -
}

Si desea una ventana para que aparezca en la pantalla y actuar como la ventana principal, interceptar las pulsaciones del teclado, utilice el método makeKeyAndOrderFront. Programadores de cacao con frecuencia utilizan este método en el método awakeFromNib para forzar la ventana principal al primer plano:

- (void) {awakeFromNib
[thewindow makeKeyAndOrderFront: nil] -
}

Ventanas de posicionamiento

Otra tarea importante que tendrá que realizar es la colocación de ventanas. Antes de ir a dar órdenes ventanas alrededor, primero tiene que conocer su posición actual. Utilice el método del marco de NSWindow para descubrir el origen y el tamaño de una ventana. El método devuelve una estructura NSRect, que contiene NSPoint y NSSize indique el origen y el tamaño de la ventana, respectivamente.

Después de conocer un origen y tamaño de las ventanas, es un asunto trivial para cambiar su posición. En primer lugar, establecer el origen de su agrado y llamar al método setFrameOrigin para aplicar la nueva posición. En este ejemplo se mueve una ventana de diez píxeles izquierda de su posición actual:

- (IBAction) moveLeft: (id) del remitente
{
NSRect theFrame = [marco thewindow] -
NSPoint theorigin = theFrame.origin-
theOrigin.x = theOrigin.x - 10-
[thewindow setFrameOrigin: theorigin] -
}

Para situar una ventana en el centro de la pantalla, utilice el método centro práctico. En este ejemplo se centra una ventana en la pantalla:

- (IBAction) CenterWindow: (id) del remitente
{
[centro thewindow] -
}

Hacer un seguimiento de las ventanas

La mayoría de las aplicaciones Cocoa tienen un menú Ventana para ayudar a los usuarios realizar un seguimiento de las ventanas abiertas. Normalmente, usted debe utilizar este menú como una lista de las ventanas de documento abiertas. (Probablemente no mostrar, por ejemplo, una ventana de la barra de herramientas en el menú Ventana.) La gran cosa sobre el menú Ventana es que el cacao se ocupa de él para usted. Si su ventana tiene las propiedades, Cacao añade automáticamente al menú Ventana:

  • Tiene una barra de título
  • Es de tamaño variable
  • Puede convertirse en la ventana principal

Puede excluir una ventana en el menú Ventana al alterar cualquiera de estas propiedades. Si, por el contrario, tiene una ventana que obedece cada una de estas reglas, pero usted todavía desea que se quede fuera del menú Ventana, utilice el método setExcludedFromWindowsMenu. El método awakeFromNib es un buen lugar para utilizar esta llamada porque el método surte efecto cuando su aplicación se inicia.

- (void) {awakeFromNib
[thewindow setExcludedFromWindowsMenu: nil] -
}

Poniendo ventanas a trabajar para usted

Para ver cómo éstos ventana cuenta con el trabajo, haga lo siguiente:

1. Inicie Project Builder y cree un nuevo proyecto de aplicación Cocoa.

Haga doble clic en el icono de Project Builder en el Finder para lanzarlo. Después de su lanzamiento, elija el menú Archivo -> Nuevo proyecto. En la ventana que aparece, seleccione Cacao de aplicaciones y haga clic en Aceptar.


2. Cree una nueva ventana en el archivo MainMenu.nib.

Haga doble clic en el archivo MainMenu.nib en el Grupo de Recursos para abrir el archivo en Interface Builder. En la ventana del archivo MainMenu.nib, haga clic en la ficha Instancias. A continuación, arrastre una nueva ventana en el panel de cacao en Windows de la ventana Paletas de la ventana del archivo MainMenu.nib. Para seguir con el ejemplo, el nombre de esta nueva ventana MenuWindow. Usted va a usar para controlar la ventana por defecto que ya es parte de la interfaz.

3. Abra la nueva MenuWindow y agregue tres botones a la misma.

4. Cree una clase controlador.

Para ello, haga clic en la pestaña Clases de la ventana del archivo MainMenu.nib. Vaya a la izquierda y seleccione NSObject. Pulse Intro para crear una nueva clase y el nombre de MyWindowController. Elija Clases -> Instanciar MyWindowController para crear una instancia de la nueva clase.

5. Haga doble clic en la nueva instancia MyWindowController y añadir puntos de venta y acciones a la instancia en la ventana de información.

Agregue los siguientes puntos de venta: theMenuWindow, theShowButton y thewindow. Añadir estas acciones: CenterWindow, moveLeft y ShowWindow.

Conecte las tres nuevas acciones a los botones en MenuWindow por control arrastrando desde cada botón t la instancia MyWindowController. Haga clic en Conectar en la ventana de información para conectar cada acción.

A continuación, conecte los dos puntos de venta relacionados con ventanas a sus correspondientes ventanas. Control y arrastre desde la instancia MyWindowController a cada ventana en la ventana de archivo MainMenu.nib. Haga clic en Conectar en la ventana de información para conectarse a la toma de corriente adecuada.

Por último, conecte la salida theShowButton al botón superior en el MenuWindow.

6. Haga doble clic en la instancia MyWindowController. Elija Clases -> Crear archivos para MyWindowController y añadir los archivos de cabecera y de ejecución para la instancia.

7. Volver a Project Builder y añadir este código al archivo MyWindowController.m:

import "MyWindowController.h"
implementation MyWindowController
- (IBAction) CenterWindow: (id) del remitente
{
[centro thewindow] -
}
- (IBAction) moveLeft: (id) del remitente
{
NSRect theFrame = [marco thewindow] -
NSPoint theorigin = theFrame.origin-
theOrigin.x = theOrigin.x - 10-
[thewindow setFrameOrigin: theorigin] -
}
- (IBAction) ShowWindow: (id) del remitente
{
si ([thewindow isVisible])
{
[thewindow orderOut: remitente] -
[theShowButton setTitle: @ "Mostrar ventana"] -
}
otro
{
[thewindow orderFront: remitente] -
[theShowButton setTitle: @ "Ocultar Ventana"] -
}
}
- (void) {awakeFromNib
[thewindow makeKeyAndOrderFront: nil] -
[theMenuWindow makeKeyAndOrderFront: nil] -
}
@fin

8. Probar el proyecto.

Para ello, elija Generar -> Construir y Ejecutar.




» » » » Trabajo con ventanas de interfaz en el cacao