Curso de iOS7: Manejo de imágenes: UIImageView y UIImage, Images.xcassets

UIIMageView

No hay aplicación que no controle imágenes. Para ello deberemos conocer y saber manejar el UIImageView que es la vista principal para el manejo de imágenes.

Este componente principal nos permite arrastrarlo a una escena como siempre. En principio será una View aun poco sosa:
Lo importante son las propiedades que tenemos disponible para esta vista:
En las imágenes disponemos de dos estados, normal y highlighted. Podemos elegir una imagen que asignar a cada uno de los estados. De normal, con asignar una al atributo image sería suficiente para presentarla en el ImageView.

El atributo principal es image.

También disponemos de las propiedades típicas de UIView:

  • hidden
  • Opaque
  • alpha
  • tag
  • etc…
Crearemos un IBOutlet para el UIImageView de la manera habitual en el fichero de cabecera del ViewController.h:

Inclusión de imágenes

Como siempre será necesario incluir en el proyecto alguna imagen. Esto podemos hacerlo arrastrando cualquier imagen desde el finder hasta las carpetas de proyecto. Esto nos sacará un diálogo similar a este:

Debemos recordar de dejar marcada la opción de copiar  los ítems al proyecto y que esté marcada la opción de Add to targets del proyecto de la aplicación que estamos realizando.
Así nos aparecerán las imágenes en el proyecto:
Y una vez añadidas nos permitirá colocarlas en los atributos del objeto:

Carpeta ArtWork

Esta es el típico grupo (como se llaman las carpetas dentro de Xcode) que se suele crear para guardar las imágenes que se vana distribuir con el proyecto. Para crearlo deberemos pulsar botón derecho sobre la carpeta del proyecto, la que contiene el código fuente del proyecto y pulsar en la opción New Group, o sobre la opción New Group with Selection teniendo seleccionadas las imágenes que queremos incluir en el nuevo grupo y nos saldrá una nueva carpeta en el proyecto donde podremos escribir el nombre:

Una vez cambiado el nombre nos debería aparecer más o menos así:

En este caso como ya habíamos seleccionado las imágenes al crear el grupo y hemos pulsado en New Group with Selection nos ha metido las imágenes directamente dentro del grupo.
Si no hubiera sido así sólo sería necesario seleccionar las imágenes y hacer un Drag and Drop sobre la carpeta en el Navegador del proyecto.

Métodos principales

Veamos ahora los métodos principales con los que podemos trabajar con el UIImageView:

  • initWithImage: este método nos permite inicializar un objeto indicando cual es el UIImage que queremos cargar.
  • setImage: permite pasar como parámetro un UIImage que tenga ya la imagen cargada.
  • startAnimation: permite iniciar una animación 
  • stopAnimation: para la animación que estemos realizando

UIImage: Una imagen en memoria

Como podemos ver lo principal el el objeto UIImage, que es el que nos permite inicializar el Objeto de vista. Los formatos permitidos para el objeto de imagen son:
  • PNG
  • JPEG
  • GIF
  • TIFF
  • BMP
  • ICO
  • CUR
  • XBM

Inicialización

Ahora veamos cómo podemos llegar a inicializar una imagen con los ficheros de imagen que hemos incluido en el proyecto. Para ello será necesario hacer uso del método imageNamed del objeto UIImage:

Una vez cargada la imagen sólo deberíamos pasarla a la vista:

Carga de una Imagen desde Internet

Para ello es necesario que dispongamos al menos de una una dirección URL que nos permita saber donde está la imagen que queremos cargar. Esta URL será un literal de una NSString.
Una vez se sabe desde que URL tenemos que descargar la imagen, debemos rellenar un objeto NSURL que es el formato principal de acceso a URL’s de la biblioteca Fundation.
Una vez inicializado el objeto NSURL cebemos crear un nuevo objeto NSData, que el que dispone del método dataWithContentsOfURL:objetoUrl que es el que permite realizar la petición web para descargar la imagen y dejarla en el objeto de datos.
Una vez se ha descargado la imagen podemos inicializar el objeto UIImage con los datos descargados mediante el método initWithData:datos . 
Lo cual ya nos permite disponer en memoria de un objeto con el contenido de la Imagen de internet. Por lo tanto ya podemos asignarlo al UIImageView mediante el método setImage:imagen2 .
Este tipo de procesos que pueden llevar bastante tiempo, suele convenir llevarlos a hilos paralelos de ejecución, como explicaremos en posteriores temas.

Carga de una imagen desde la Galería de fotos

Para cargar una imagen desde la galería de fotos en iOS es necesario hacer uso de un tipo especial de UIPicker es el UIImagePickerController. Este picker nos permitirá escoger entre las fotos que tenemos en la galería y nos la devolverá a nuestro ViewController mediante un método definido en el delegado de dicho UIImagePickerController:

– (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

De esta manera podremos manejar la imagen que nos devuelvan y hacer lo que queramos con ella.

Llamando al Picker de Imágenes

Para ello hemos colocado un botón en la escena y hemos creado un IBAction que es llamado con el evento Touch Up Inside y hemos indicado en el fichero de cabecera del controlador que queremos implementar dos protocolos UIImagePickerControllerDelegate,UINavigationControllerDelegate . El primero de ellos es el que nos permite gestionar las funciones necesarias para que funcione el picker el segundo nos permite manejar las llamadas entre escenas, ya que vamos a llamar a un escena de sistema que es la que permite escoger la imagen de la galería. 
Dentro del flujo de nuestra aplicación al hacer el salto a la escena del picker, perderemos el control momentáneamente cediéndolo al sistema. Y luego volveremos a ejecutar código de nuestro controlador cuando volvamos del picker.
Veamos el código de llamada al picker de imágenes dentro del IBaction creado:
Como vemos en la captura:
  • Inicializamos el picker de la manera habitual
  • Indicamos que el delegado del picker es la clase del controlador
  • Indicamos que queremos permitir la edición de la imagen
  • Indicamos la fuente, desde donde vamos a coger la imagen, en este caso es UIImagePickerControllerSourceTypeSavedPhotosAlbum es decir la galería.  
  • Lanzamiento del picker con el método resentViewController:picker animated:YES
De esta manera nos saldrá una pantalla de selección de imagen de la galería.

Manejando la Imagen seleccionada desde la galería

El usuario ahora tiene dos opciones:
  • Elegir una foto
  • Cancelar la selección 
En ambos casos volveremos a nuestro controlador cuando termine.
En el caso de que el usuario haya elegido una foto se ejecutará uno de los métodos del protocolo UIImagePickerControllerDelegate:
Como podemos ver el método didFinishPickingMediaWithInfo nos pasará toda la información del objeto seleccionado llamado info.
Lo primero que hacemos es quitar el Picker de la vista y luego obtenemos desde el objeto info la imagen original guardada en la galería. Como es un diccionario lo hacemos a través del método objectForKey y le pasamos como parámetro su clave @”UIImagePickerControllerOriginalImage” . Esto nos devolverá la UIImage que luego pasamos a la vista.
En el caso de que nos hayan cancelado la selección de la imagen deberíamos implementar un método que nos permite capturar esta acción:
De esta manera podemos asociar cualquier acción por si el usuario cancela.

Capturar una imagen desde la cámara

Funciona de una manera bastante parecida a la selección de una foto de la galería, en este caso hemos asociado otro IBAction distinto para distinguir los códigos:
como puede verse a través del picker intentamos averiguar si está la cámara disponible mediante el método isSourceTypeAvailable donde le pasamos como parámetro la fuente que selecciona la cámara UIImagePickerControllerSourceTypeCamera .
Si no está disponible intentamos llamar al método que controla la llamada a la galería. Pero en el caso de que dispongamos de cámara hacemos los mismos pasos que hicimos anteriormente con la llamada a la galería:
  • Inicialización del picker
  • Selección del delegado en nuestro controlador, para que encuentre las funciones del protocolo UIImagePickerControllerDelegate
  • Selección de la cámara
  • Lanzamiento del picker
NOTA: cabe destacar que en el simulador del iOS que viene con el Xcode no disponemos de cámara así que para poder probar esta funcionalidad será necesario disponer de un dispositivo físico, estar dado de alta en un Developer Program, tener asociado nuestro dispositivo a nuestra cuenta de developer y lanzar la ejecución de nuestro programa en ese dispositivo físico.

Guardar una imagen en la galería

Otra de la funciones típicas con imágenes es la necesidad de guardar imágenes dentro de la galería. Para ello deberemos utilizar el UIImageWriteToSavedPhotosAlbum que es una de las funciones definidas en el UIKit.h. 
Veamos un ejemplo de funcionamiento:
 Los parámetros de llamada a la función son los siguientes:
  • El objeto UIImage que queremos guardar, en este caso le pasamos la imagen del UIImageView que tenemos puesta en ese momento.
  • La clase responsable de implementar los métodos que necesitamos para funcionar, en este caso el controlador
  • El método responsable de manejar por si hay algún error en el guardado: didFinishSavingWithError:contextInfo
  • La información del contexto, por si es necesaria, en este caso no lo es
De esta manera si hay algún problema intentará ejecutar el método que le hemos indicado a atrvés del selector:
Comprobamos si ha habido algún error con un if y actuamos en consecuencia.

Images.xcassets

Este fichero especial del proyecto permite manejar las imágenes de Iconos de lanzamiento y las Imágenes de Lanzamiento del proyecto:

al pulsar sobre él nos da acceso a dos categorías principales:

AppIcon nos permitirá seleccionar los iconos de lanzamiento de la aplicación. Los iconos que tendremos disponibles desde el Home de iOS:

LaunchImage por su parte nos permitirá colocar las imágenes de lanzamiento de la aplicación:

Como podemos ver en ambos casos disponemos de varios tamaños, las explicaciones necesarias para el diseño de los iconos las tenemos disponibles desde la propia ayuda de Apple.

Dejo por aquí un tutorial en video que puede ser interesante para el manejo de assets con el Images.xcassets:

Licencia Creative Commons

Curso de iOS7: UITabBarController, combinado con la Navigation Controller

Otro de los componentes principales de la navegación es el Tab Bar Controller. Este componente nos va a permitir manejar una serie de pestañas debajo de la escena que será relacionadas con otras escenas. Al pulsar cada una de las pestañas abrirán en la parte superior la escena que hayamos seleccionado. Para poder explicar cómo funciona crearemos un proyecto de Single View Application.

Al entrar al storyboard deberíamos ver lo un View Controller. Borramos el View Controller, seleccionándolo y dandole a la tecla de borrar. Esto nos debería dejar un storyboard limpio.

Incluyendo un Tab Bar Controller

Para incluir el Tab bar controller lo buscamos en la Biblioteca de Objetos:
Al arrastrarlo sobre el Storyboard deberíamos ver lo siguiente:
Como podemos ver se nos ha colocado el Tab Bar Controller como escena principal, y se nos han agregado dos View Controller más. Cada uno de ellos nos aparece enlazado con el Tab Bar Controller mediante un segue de tipo Root View Controller. De una manera muy parecida a como vimos en el caso del Navigation Controller.
Fijemonos en detalle como se ve el Tab Bar en el Storyboard:
Como podemos ver tenemos dos nuevas pestañas en la barra. Cada una de ellas representa a otra escena. La Item 1 representa a la primera escena:
Y el Item 2 representa a la segunda escena:

Propiedades del Bar Item

En ambos casos podemos modificar el Item de la pestaña seleccionándolo, desde su escena asignada, a través de sus propiedades:

Como podemos ver tenemos lo siguiente:

  • Title: el texto que sale en la pestaña
  • Image: imagen asignada
  • Tag: identificativo del item
  • Enabled: posibilidad de habilitar o deshabilitar el elemento
Vemos que al modificar el título en las pestañas de los elementos nos aparecen modificadas las pestañas en el tab bar controller:
Si asignamos un color de fondo a cada Escena secundaria, veremos, cuando vayamos a ejecutarla, el funcionamiento de la barra de pestañas. Para ello seleccionamos el view Principal de la escena secundaria:
Aquí podemos ver también El Tab Bar Item que hemos modificado anteriormente.
Ahora con la vista seleccionada, en sus propiedades:
Cambiamos el atributo Background y le ponemos el color que queramos, aquí por ejemplo hemos puesto Azul y Verde, respectivamente.
Al ejecutar la aplicación se verá lo siguiente:
Com podemos ver cuando está la primera pestaña seleccionada nos aparece la escena azul. Y cuando pulsamos sobre la segunda pestaña:
nos aparece la escena verde.

Eliminando una escena del Tab Bar Controller

Para eliminar una escena del tab bar controller basta con seleccionar el segue que se une a ella:
Y eliminarlo. En el storyboard:
O al intentar volver a ejecutar la aplicación ya no aparecerá esa pestaña:

Añadir una escena a la Tab Bar

Para añadir una escena a la Tab Bar es necesario establecer de nuevo el segue en el storyboard, partiendo del tab bar controller y con el control pulsado llevándolo a la escena que queremos incluir y soltarlo allí:
Al soltarlo debería aparecer un menú contextual:
Selecionamos dentro de Relationship Segue, view controllers y debería volver a aparecer el segue en su lugar:
y al ejecutarlo debería aparecer la pestaña nueva:
Así dentro del Tab Bar Controller podemos incluir varias pestañas. Esto se suele denominar navegación en Anchura. En comparación al Navigation Controller que se suele llamar navegación en Profundidad.
Prueba a Añadir una nueva vista Roja al Tab Bar Controller.

Combinando el Tab Bar Controller con el Navigation Controller

Ahora sobre el proyecto que ya hemos creado vamos a incluir el Navigation Controller, para ver cómo trabajan las dos juntas. Arrastramos al Storyboard un nuevo Navigation Controller:
Com ya vimos en el apartado de Navigation Controller. Al arrastrarlo nos aparece el Navigation Controller enlazado por un segue con un Table View Controller. De momento lo dejaremos para explicar las posibles combinaciones entre estos dos sistemas de navegación.

Dejando el Tab Bar Controller delante

Ahora veamos como funciona cuando enlazamos el Tab Bar Controller con un Navigation Controller. Para ello como vimos anteriormente, arrastramos con el control pulsado desde el Tab Bar Controller hasta el navigation controller y decimos que el segue es de tipo view controllers:
Nos aparecerá el segue conectando el tab bar controller con el navigation controller y debajo de la escena del navigation controller aparece su respectiva pestaña editable. Por supuesto en el tab bar controller aparecerá esa nueva pestaña:
Al ejecutar la aplicación podemos ver que al pulsar en la pestaña de la navegación:
nos sigue saliendo la barra de navegación arriba y la barra de pestañas abajo.
Repitamos el mismo proceso, pero esta vez colocando el navigation controller entre la tabbar y la vista roja:
  • Incluimos otro Navigation Controller
  • Eliminamos el segundo Table View Controller que está asociado a ese nuevo Navigation Controller
  • Eliminamos el segue que conecta el tab bar controller con la escena roja
  • Conectamos el tabbar controller con el nuevo navigation controller
  • Le damos un título a la pestaña del nuevo navigation controller
  • Y le decimos que la escena roja es la roto view controller del nuevo navigation controller

Debería quedar algo parecido a esto:

Ahora vamos a incluir un nuevo view controller en el storyboard y lo enlazaremos con la escena roja mediante un segue de tipo push:

  • Incluimos un nuevo View Controller
  • Le colocamos un color Cyan al view principal de ese nuevo view controller
  • Incluimos un botón en la barra de navegación en la escena roja
  • Arrastramos desde el botón, con el control pulsado hasta la escena Cyan
  • Seleccionamos el tipo push
Debería quedar de una manera similar a esto:
Al ejecutar la aplicación y entrar a la pestaña de la segunda navegación veremos lo siguiente:
como podemos ver nos visualiza la escena roja y se ve el botón que hemos incluido, si lo pulsamos:

nos sigue saliendo la barra de navegación arriba que nos permite volver a la vista roja y sigue saliendo la barra de pestañas en la parte inferior.

Licencia Creative Commons

Si estás interesado en seguir formándote tenemos una serie de cursos gratuitos:

Cursos Gratuitos

También disponemos de algunos cursos de pago por si son de tu interés:

https://cursosdedesarrollo.com/tienda/

Curso de Angular:

Angular

 

Curso básico de Objective C: Categorías

Una de las cosas más interesantes de Javascript es la posibilidad de ir agregando propiedades y funcionalidades a las clases ya existentes. En Objective C se puede realizar algo similar utilizando las Categorías. Esto nos da la posibilidad de realizar la implementación de una clase mediante varias personas a la vez. Cada uno sería responsable de un fichero y se podría realizar una gestión de versiones muy sencilla.

Creación de una Categoría

Para crear la categoría en un proyecto abierto es necesario crear un nuevo fichero mediante el uso del menú File->New->File o pulsando Comando + N. Aparecerá el Asistente de creación de nuevo fichero:
Seleccionamos Objective-C category y pulsamos en Next. Aparecerá la pantalla de nombres:
Aquí es donde debemos escribir el nombre de la categoría y el nombre de la clase de la cual queremos ampliar funcionalidades en el campo Category on. Cuando terminemos pulsamos en Next. Y nos saldrá la pantalla de guardado:
Dejaremos que lo guarde en la misma carpeta del proyecto. Recordad dejar seleccionado en Targets el nombre del proyecto. Pulsamos en Create. Ahora nos debería aparecer el fichero de implementación de la nueva categoría, con un contenido similar a este:
#import “NSString+DVString.h”
@implementation NSString (DVString)
@end
Por otra parte deberíamos tener el fichero de cabecera .h:
#import <Foundation/Foundation.h>
@interface NSString (DVString)
@end
Como podemos ver el nombre de los ficheros debería ser primero el nombre de la clase que queremos ampliar un + y luego el nombre que le hemos dado a nosotros ala categoría. Por otra parte tanto en el fichero de cabecera como en el de implementación, se parecen mucho a los de una clase normal con sus @implementation y @end en el fichero de implementación. Y en el de cabecera con el @interface y @end .
En ambos casos después del primer @ se coloca el nombre de la clase que queremos ampliar funcionalidad y entre () el nombre de la categoría que estamos escribiendo.
Obviamente en el fichero de cabecera importamos las clases fundacionales y en el de implementación el fichero de cabecera de la categoría.

Incluyendo métodos y propiedades

La inclusión de métodos y propiedades sería de una manera similar a como se realiza en una clase normal. Tal como indicamos en el tema sobre Clases y Objetos.
Por ejemplo vamos a incluir un método que permita imprimir la cadena de caracteres por consola, el fichero de cabecera quedaría así:
#import <Foundation/Foundation.h>
@interface NSString (DVString)
– (void) imprime;
@end
y el fichero de implementación sería este:
#import “NSString+DVString.h”
@implementation NSString (DVString)
– (void) imprime{
    NSLog(@”%@”,self);
}
@end
Com puede verse hemos declarado e implementado un método llamado imprime que permite sacar por consola el valor de la cadena almacenada en el objeto.

Utilizando un Objeto de la categoría

Para ello en el fichero main.m deberemos importar el fichero de cabecera de la categoría:

#import “NSString+DVString.h”

    

La declaración del Objeto sería como se hace normalmente con un objeto NSString:
NSString *cadena=@”valor”;
Después sólo restaría utilizar el método declarado en la categoría:
[cadena imprime];

Curso de iOS7: Manejo de formularios (II): UISwitch, UISlider, UISegmentedControl, UIStepper y UIDatePicker

Veamos ahora más vistas que podemos usar en los formularios. Recordemos que todos ellos deberán utilizarse como IBOutlets y para manejar sus eventos deberemos utilizar las IBAction, tal como dijimos en el tema de IBOutlets y UIActions.

UISwitch: la checkbox

Típicamente las checkbox de han utilizados como mecanismos que pueden ser activados o desactivados por parte del usuario, para marcar una opción.
En este caso el UISwitch actua de una manera similar. Por lo que cuando lo incluyamos como un IBOutlet podremos gestionar el objeto que tenemos en la vista y consultar su estado.
Veamos sus atributos en el inspector:
Como se puede ver la parte más importante es el estado que puede estar en On u Off. Si lo dejamos en On aparecerá marcado por defecto, con Off sucederá lo contrario.
También podemos llegar a seleccionar una imagen para el estado On y otra para el Off.

Propiedades: on

La propiedad más importante del UISwitch es la llama on de tipo booleano. Así que si queremos que esté activado por defecto mediante código deberemos realizar lo siguiente:
check.on=YES;
En el ejemplo usaremos el objeto IBOutlet llamado check.

Eventos

El evento más importante para el UISwitch es el Value Changed. Es el que nos permitirá saber cuando haya sido cambiado si estado. Y se disparará tantas veces como el usuario haya cambiado su valor.
Pongamos un ejemplo de IBAction:
– (IBAction)checkPulsada:(id)sender {
    NSLog(@”Check pulsado:%hhd”,[check isOn]);
}
Como puede verse en el ejemplo estamos consultado el método isOn que es el getter de la propiedad on.

UISlider: el selector numérico de rango

 Este tipo de control en el formulario permite seleccionar de un rango de números un valor.

Atributos: value

Veamos sus atributos para que resulte más fácil explicarlo:
Como podemos ver tenemos varios atributos importantes:
  • value: es el valor que ha seleccionado el usuario, de tipo float.
  • value minimum: es el valor mínimo del rango
  • value maximum: es el valor máximo que puede tomar
  • value Current: es el valor del que va a partir
  • Update Events, Continuous: cuando está seleccionado permite que se vaya cambiando el valor según el usuario vaya moviendo el slider. Si no está marcado, sólo se disparará cuando el usuario haya dejado de mover el slider.
En el ejemplo tenemos la típica selección de edad, 18 el mínimo, 65 el máximo y el valor actual es de 35.

Eventos: Value Changed

De cara a ver su funcionamiento en el ejemplo hemos dado de alta un UISlider con esas configuraciones y un TextLabel, ambos con sus respectivos IBOutlet, slider y edad, respectivamente.
También hemos dado de alta un IBAction llamado cambiaSlider: que será llamado cada vez que cambie el valor del slider, es decir relacionado con el Evento Value Changed, veamos la implementación del método:
– (IBAction)cambiaSlider:(id)sender {
    edad.text=[NSString stringWithFormat:@”%.0f”,slider.value];
}
Si nos damos cuenta el valor del slider es de tipo float, por lo que al convertirlo en cadena de caracteres utilizamos el %.0f  que nos permite pasarlo a un número sin decimales.
Luego se lo asignamos al texto del TextLabel de la edad para ver como va cambiando el valor del slider.

UISegmentedControl: los radio button

Como en la mayor parte de los formularios necesitamos presentar varias opciones de las cuales sólo podamos seleccionar una. Los radio button de HTML en iOS se llaman UISegmentedControl.

Atributos

Como podemos ver tenemos varios elementos interesantes. Para empezar el número de segmentos. Este nos permitirá meter más elementos en el siguiente desplegable.
Una vez seleccionad un segmento en el desplegable podemos configurar un título, una imagen y si está habilitado o seleccionado de primeras.
En el ejemplo tenemos dos segmentos para hombre y mujer y el primer segmento, el segmento 0, nos aparecerá seleccionado.
De esta manera si queremos saber que segmento ha sido seleccionado por el usuario deberemos usar el método   selectedSegmentIndex:
[sexo selectedSegmentIndex]
Este método nos devolverá un número del segmento que ha sido seleccionado por parte del usuario, empezando por 0.En el ejemplo, tenemos dos segmentos: 0 corresponde a Hombre y 1 a Mujer.
Si quisiéramos averiguar el título asignado a un segmento deberemos utilizar el método titleForSegmentAtIndex:
[sexo titleForSegmentAtIndex:@0]
En este caso nos devolverá la cadena de caracteres Hombre.

Eventos: Value Changed

Como en otros casos disponemos de un evento Value Changed que nos permite ejecutar un IBAction cada vez que cambie el segmento seleccionado, veamos un ejemplo:
– (IBAction)cambiaSegmented:(id)sender {
    NSLog(@”Sexo seleccionado:%ld”,(long)[sexo selectedSegmentIndex]);
}
En este caso mostrará por consola el valor 0 o 1 dependiendo de lo que haya seleccionado el usuario.

UIStepper: pasito a pasito

En muchos formularios queremos que el usuario vaya cambiando un valor pulsando botones para evitar que tenga que introducir manualmente un número.

Atributos: value

Como podemos ver es muy similar al UISlider, en su funcionamiento básico. El atributo principal será value. Minimum, Maximum y Current funcionan como con el UISlider.
Sin embargo Step nos permitirá cambiar el incremento y del decremento del valor almacenado.
Así si colocamos un Step de 2, sumará o restará 2 al valor cuando pulsemos el más o el menos respectivamente.
Continuous funcionará de una manera parecida al Slider también.
Y el Autorepeat permitirá dejar pulsado un botón y que se repita la acción pasado un tiempo.

UIDatePicker: El selector de fecha y hora

Este tipo de selector permitirá darle a escoger al usuario una fecha y una hora.

Atributos

Como podemos ver tenemos:
  • date: nombre del atributo de tipo NSDate que almacena la fecha
  • Mode: permite escoger el tipo de dato a recoger
  • Interval: el intervalo de tiempo
  • Date: fecha que queremos coger por defecto
  • Minimum y Maximum Date: fecha mínima y máximo
  • Timer: tiempo que queremos dar para escoger la fecha

Eventos: Value Changed

Como en el resto de elementos de formulario podemos escoger eventos para realizar un IBAction, el típico es Value Changed. Veamos un ejemplo:

– (IBAction)cambiaPicker:(id)sender {
    NSLog(@”%@”,datepicker.date);
}
Licencia Creative Commons

Si estás interesado en seguir formándote tenemos una serie de cursos gratuitos:

Cursos Gratuitos

También disponemos de algunos cursos de pago por si son de tu interés:

https://cursosdedesarrollo.com/tienda/

Curso de Angular:

Angular

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información. ACEPTAR

Aviso de cookies