Subscribe Twitter Twitter

viernes, 19 de noviembre de 2010

Actionsheet

Hola a todos, retomando el tema de los artículos hoy voy a hablaros sobre el UIActionSheet. Seguramente casi todos vosotros lo conocéis aunque algunos tal vez no asocien su nombre al control.

¿Qué es el control UIActionSheet?

El control UIActionSheet es un control que aparece desde la parte de abajo de la pantalla y que suele usarse para alertar al usuario y darle una serie de opciones con la opción de destacar algunas de ellas. Este control lo podemos ver en la agenda cuando vamos a eliminar un contacto y nos pide la confirmación.

Uso de un UIActionSheet en nuestra aplicación:

A la hora de trabajar con este control lo primero que debemos hacer es indicar en la clase en la que vayamos a trabajar con él en el .h que vamos a usar su delegado, el cual se llama "UIActionSheetDelegate" quedando por lo tanto nuestro .h de la siguiente forma:

miClase:UIViewController <UIActionSheetDelegate>

Una vez hecho esto, iremos al .m y crearemos nuestro control con el siguiente código:

UIActionSheet *myActionSheet=[[[UIActionSheet alloc]initWithTitle:@"RemoveAll" delegate:self cancelButtonTitle:@"NO" destructiveButtonTitle:@"YES" otherButtonTitles:@"Not sure", @"maybe",@"not sure",@"other time",@"sometimes",@"never", nil]autorelease];

[myActionSheet showInView:self.view];


Una vez visto el código vamos a analizarlo:
El botón que pongamos como destructiveButton tendrá el fondo por defecto rojo.
El botón que pongamos como cancelButton tendrá el fondo por defecto en gris.
Los botones que pongamos en otherButton su fondo será blanco y si ponemos demasiados elementos automáticamente te crea una tabla con scroll tal y como se ven en la siguiente imagen:




Ahora con el control ya creado nos interesará capturar en qué opción han pulsado el usuario y para eso gracias a que declaramos en el .h su delegado tendremos acceso a capturar los eventos asociados a ese control entre los que está uno que nos permite capturar en qué botón ha pulsado el usuario entre otras cosas.

Os pongo el ejemplo de como vamos a capturar donde ha pulsado:


-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex(NSInteger)buttonIndex {

NSLog(@"ButtonsIndex: %i",buttonIndex);
if (buttonIndex==[actionSheet cancelButtonIndex])
{
NSLog(@"Cancelled");
}

if (buttonIndex == [actionSheet firstOtherButtonIndex])
{
NSLog(@"primer boton de otros: %@",[actionSheet buttonTitleAtIndex:buttonIndex]);
}

if (buttonIndex == 2)
{
NSLog(@"Otra");
}


Como podéis ver en el ejemplo el método que estamos usando para capturar el evento es "didDismissWithButtonIndex" y estamos recibiendo qué índice ha sido pulsado, y luego estamos comparando las los 3 tipos posibles de boton (los 2 destacados y cualquiera de los de la tabla) a través de su índice.

Por último relacionado con este control os dejo los links que me parecen de interés:Métodos que nos permiten capturar acciones del control a través de su delegado:

Link

Todas las propiedades y métodos del actionSheet propiamente dicho:
Link