Advertisement
  1. Code
  2. iOS SDK

Fundamentos de iOS: UIAlertView y UIAlertController

by
Difficulty:BeginnerLength:ShortLanguages:

Spanish (Español) translation by Javier Salesi (you can also view the original English article)

Aún si apenas estás ingresando en el mundo del desarrollo en  iOS, es casi seguro que conozcas UIAlertView. La clase UIAlertView tiene una interfaz simple y es usada para presentar alertas de ventanas tipo modal.

Aunque Apple ha dejado atrás UIAlertView en iOS 8. A partir de iOS 8, se recomienda usar la clase UIAlertController  para presentar action sheets (hojas de acción) y alertas de ventanas tipo modal. En este consejo rápido, te mostraré que tan fácil es transicionar de UIAlertView a UIAlertController.

1. Configuración del Proyecto

Lanza Xcode 6.3+ y crea un nuevo proyecto basado en la plantilla Single View Application.

Choose the Single View Application Template

Nombra el proyecto Alerts, establece Language en Swift, y establece Devices en iPhone. Indica a Xcode donde te gustaría guardar los archivos del proyecto y da click en Create.

Configure the Project

Comencemos agregando un botón para desencadenar un alert view (vista de alerta). Abre Main.storyboard y agrega un botón a la view (vista) de view controller. Establece el título del botón en Show Alert y agrega las restricciones necesarias al botón para mantenerlo en su lugar.

Create a Simple User Interface

Abre ViewController.swift y agrega una acción a la implementación de la clase. Por el momento deja vacía la implementación de la acción. Vuelve a Main.storyboard y conecta la acción showAlert de view controller con el evento Touch Up Inside del botón.

2. UIAlertView

Comencemos mostrando un alert view usando la clase UIAlertView. Como lo mencioné, la interfaz de la clase UIAlertView es muy simple. El sistema operativo se encarga de los detalles escenciales. Así se ve la implementación actualizada de la acción showAlert.

La inicialización es sencilla. Proporcionamos un título y un mensaje, pasamos un objeto delegado, un titulo para el botón de cancelar, y títulos para cualquier otro botón que nos gustaría incluir.

El objeto delegado necesitar cumplir con el protocolo UIAlertViewDelegate. Debido a que view controller actuará como el delegado de alert view, la clase ViewController necesita cumplir con el protocolo UIAlertViewDelegate.

Los métodos del protocolo UIAlertViewDelegate son definidos como opcionales. El método que usarás más frecuentemente es alertView(_:clickedButtonAtIndex:). Éste método es invocado cuando el usuario pulsa uno de los botones de alert view. Así es como se pudiera ver la implementación de alertView(_:clickedButtonAtIndex:).

Compila y ejecuta la aplicación en el simulador iOS para ver si todo está funcionando como se esperaba.

3. UIAlertController

La interfaz de UIAlertController es muy diferente de la de UIAlertView, pero la motivación de Apple para transicionar a la clase UIAlertController se entiende después de que lo usas unas cuantas veces. Es una interfaz elegante que se sentirá familiar.

El primer beneficio de usar la clase UIAlertController es la ausencia de un protocolo delegado para manejar la interacción del usuario. Ésto significa que solo necesitamos actualizar la implementación de la acción showAlert. Observa la implementación actualizada debajo.

La inicialización es muy fácil. Pasamos un titulo, un mensaje, y lo más importante, establecemos el estilo preferido en UIAlertControllerStyle.Alert o .Alert para abreviar. El estilo preferido indica al sistema operativo si el alert controller (controlador de alerta) necesita ser presentado como un action sheet, .ActionSheet, o una alerta de ventana tipo modal, .Alert.

En lugar de proporcionar títulos para los botones y manejar la interacción del usuario a través del protocolo UIAlertViewDelegate, añadimos acciones al alert controller. Cada acción es una instancia de la clase UIAlertAction. Crear un UIAlertAction es sencillo. El inicializador acepta un título, un estilo y un manejador. El argumento de estilo es de tipo UIAlertActionStyle. El manejador es una clausura, que acepta el objeto UIAlertAction como su único argumento.

El uso de manejadores en lugar de un protocolo delegado hace más elegante y más fácil de entender la implementación de una alerta de ventana tipo modal. Ya no hay necesidad de pulsar alert view si estás trabajando con múltiples alertas de ventana tipo modal.

Antes de que presentemos el alert controller al usuario, agregamos las dos acciones al llamar a addAction(_:) en el objeto alertController. Nota que el orden de los botones de la alerta de ventana tipo modal es determinada por el orden en el que las acciones son agregadas al alert controller.

Debido a que la clase UIAlertController es una subclase UIViewController, presentar el alert controller al usuario es tan sencillo como llamar a presentViewController(_:animated:completion:), pasando el alert controller como el primer argumento.

4. UIActionSheet

No es sorpresa, que Apple también dejo fuera de uso la clase UIActionSheet y el protocolo UIActionSheetDelegate. A partir de iOS 8, se recomienda usar la clase UIAlertController para presentar un action sheet.

Presentar un action sheet es idéntico a presentar una alerta de ventana tipo modal. La única diferencia es que la propiedad preferredStyle del alert controller, que necesita ser establecida en UIAlertControllerStyle.ActionSheet, o .ActionSheet por abreviar, para action sheets.

Conclusión

Aunque UIAlertView y UIActionSheet ya no se usan en iOS 8, puedes continuar utilizándolas para el futuro previsible. La interfaz de la clase UIAlertController, sin embargo, es una mejora definitiva. Añade simplicidad y unifica la API para presentar alertas de ventana tipo modal y action sheets. Y porque UIAlertController es una subclase UIViewController, la API ya se sentirá familiar.

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.