En
un post anterior veíamos como mostrar mensajes de alert mediante la clase
NSAlert. (http://ugeblog.blogspot.com/2012/02/xcode-mensajes-de-aviso.html).
En
estos mensajes de alerta podemos mostrar alguna advertencia y pedir
confirmación mediante botones, pero en determinados casos podemos querer usar
el panel para pedir algún dato adicional al usuario de manera que no se pueda
acceder al resto de la aplicación mientras el panel esté desplegado
(comportamiento modal). Para ello contamos con el uso de los customs sheets.
In a post before we could see how to show alert messages
using the class NSAlert. (http://ugeblog.blogspot.com/2012/02/xcode-mensajes-de-aviso.html).
With those messages we could show any kind of alert
requesting a user confirmation using diferentes buttons, but in some cases we
need something more like a simple confirmation, for example we could need the
user enter some kind of data forbiding the access to the rest of the
application until the user complete entering the data required (modal
behaviour). For this purpose we have the Custom Sheets.
El
ejemplo que vamos a hacer será muy simple y constará de dos ventanas, una
principal con un botón que al pulsarlo nos muestra un panel asociado a esta
ventana. Este segundo panel se ocultará mediante un botón.
The example application we are going to made is very simple.
It wil have two windows, one main window with one button which opens another
secondary window. This secondary Windows opens from the first
one so we can´t do anything in the application without clossing the last window
opened.
En
los ejemplos de Apple e incluso en la documentación de cómo manejar Custom
Sheets se nos dice que para ello implementemos el panel en su propio fichero
.nib y que llamemos a su creación desde el código, pero…¿porque complicarnos la
vida pudiéndolo hacer simple?. La idea que proponen es crear un fichero .nib (o
.xib) para cada ventana, crear un controlador para cada ventana, realizar las
correspondientes declaraciones de cada clase de manera que cada una conozca a
la otra y una vez así hacer la llamada al panel desde la ventana principal. Un
poco liante… yo prefiero hacerlo fácil, y para ello lo mejor es definir el
panel dentro del fichero nib de la propia ventana que necesita mostrar el
panel.
In the Apple example and also in the documentation which
explain the uses of customs sheets, we could see they uses an independent .nib
file for define the second panel, but… why not made it easy?, in my opinion is
more easy and clear to implementate the second panel in the same .nib file the
main window has. The other way is to create a .nib file for each window/panel,
and of course his own class controller. Also you would need to declare each
class inside the other, on the way any window could “see” the others windows it
must use. To much complicated, too many files, declarations, and so on,…a
prefer to simplify it.
Comenzaremos
creando por lo tanto un aplicación con una única ventana de entrada que
llamaremos Main Window. A esta ventana
le añadiremos un botón que posteriormente nos servirá para mostrar el panel.
El
siguiente paso es crear el panel, y para ello en el Object Library buscaremos
un objeto del tipo panel o del tipo HUD Window y lo arrastramos sobre el
fichero .xib que posee la ventana. Igualmente le ponemos un botón que luego
servirá para ocultar el panel,. Por ultimo y para evitar que se muestre el
panel al iniciar desmarcaremos la casilla Visible at Launch. Debería quedar de
la siguiente manera:
We will start creating a new Project with one main window,
with one button used to opening the panel. Also we must créate the panel, and
for this, we need to search into the Object Library for a Panel, o for a HUD
Window, drag inside the nib file near the main window. Also we need another
button inside the panel to close it. Is important to unmark the Visible At Launch
option of the panel to avoid the panel to be shown at the startup of the
application.
Una
vez creadas la ventana principal y el panel crearemos unOutlet del panel y dos
action, uno desde cada botón llamados mostratPanel y cerrarPanel. Tanto el
Outlet del panel como los Action se crearan en el fichero AppDelegate de la
ventana principal, donde encontraremos un Outlet a la ventana principal. El
fichero AppDelegate.h debería quedar algo así:
Once we have created both the window and the panel, we must
créate one Outlet for the panel and to Actions, one for the button in the main
window, and another for the button in the panel. This Outlet and Actions must
be created into the AppDelegate.h file wich control the main Window. This
AppDelegate.h file must appears as follows:
Finalmente
implementaremos el código que sirve para mostrar y cerrar el panel en el
fichero Appdelegate.m, el cual debería quedar de la siguiente manera:
Finally we must type the code to show and to closet the
panel. Both methods must be implementated into the AppDelegate.m file inside
the Actions we defined previously. It must appears as follows:
Y
eso es todo, seguimos aprendiendo …
And this is it,…. keep going in the XCode/Cocoa learning…
No hay comentarios:
Publicar un comentario