Noticias, Aplicaciones, Jailbreak y Tutoriales de iPhone, iPad y iPod Touch

19

jun

Redsn0w se actualiza para bajar BaseBand 06.15.00 en iPhone 3GS y 3G

,

19 de junio de 2012 a las 15:48

Redsn0w se actualiza para bajar BaseBand 06.15.00 en iPhone 3GS y 3G

Como os comentemos hace tiempo, MuscleNerd estaba trabajando para conseguir bajar la BaseBand 06.15.00 de iPad en los iPhone 3GS y 3G. Recordemos que cuando se lanzó esta liberación que requiería subir al BaseBand del iPad y era el único método por software capaz de liberar los iPhone. Este método tenía distintos problemas no reversibles hasta ahora.

Años después se ha logrado bajar esa BaseBand de iPad pudiendo así poder actualizar de nuevo con versiones originales...

Leer Mas

11

jun

Reproducir FLAC en iTunes y dispositivos iOS como iPhone

,

11 de junio de 2012 a las 15:42

Reproducir FLAC en iTunes y dispositivos iOS como iPhone

Free Lossless Audio Codec (FLAC) es un formato muy extendido actualmente para los que quieren reproducir en dispositivos compactos audio en alta calidad. Este formato permite comprimir el tamaño del archivo sin perder calidad y es por tanto un formato muy popular en la actualidad.

Muchos usuarios por ello están interesados en el y desean tener su música en este formato en la biblioteca de iTunes así como tenerlo en sus dispositivos iOS. ¿Es posible hacerlo? La respuesta es si y os explicaremos mas sobre ello...

Leer Mas

20

may

Curso de Programación iOS. Clase 7: cómo utilizar la herramienta Storyboard

,

20 de mayo de 2012 a las 19:05

Curso de Programación iOS. Clase 7: cómo utilizar la herramienta Storyboard

Bienvenidos a la Clase 7 del Curso de Programación iOS de iPhone4Spain.

En esta clase vamos a hacer una introducción a una herramienta, integrada en Xcode, llamada Storyboard. Con ella podemos tener una visión general de la aplicación a través de sus escenas. Facilita la navegación entre escenas por lo que se trabaja de forma algo diferente a los ejercicios de clases anteriores.Es una herramienta muy potente y va a ser un punto de inflexión para el desarrollo de vuestras aplicaciones iOS.

Vamos a ver cómo sería el desarrollo de la aplicación de la Clase 6 con Storyboard para que veáis la diferencia entre utilizarlo o no.

Creamos un proyecto nuevo. File ->New->Project…

En esta ocasión, vamos a seleccionar un proyecto “Single View Application“.

El proyecto lo hemos llamado “Clase 7” y marcamos la opción del formulario “Use Storyboard“.

Eliminamos el “ViewController” que genera automáticamente, tanto en el esquema de ficheros como en el Storyboard.

El siguiente paso es añadir todos los ficheros que necesitamos para el ejercicio: “ListViewController” que es subclase de “UITableViewController“, “DetailViewController” subclase de “UIViewController” y “ModalViewController” subclase de “UIViewController“. En esta ocasión, cuando insertamos los ficheros, no tenemos que seleccionar la opción “With XIB user interface” porque añadiremos las interfaces de usuario en el Storyboard.

Todos los ficheros que hemos insertado al proyecto los ordenaremos en carpetas.

Hemos de tener creada la estructura de ficheros que mostramos en la siguiente imagen.

Abrimos el Storyboard y añadimos las interfaces de usuario.

Agregamos el componente “Navigation Controller“. Puede que os aparezca junto con un “ViewController“. En ese caso, borramos el “ViewController” y añadimos un “TableViewController“. Ahora, enlazamos con el botón izquierdo del ratón + Ctrl el “Navigation Controller” y el “TableViewController” y seleccionamos “Relationship – Root View Controller“.

En la propiedad “Class” del “ViewController” seleccionamos “ListViewController“, de esta manera le decimos que es la interfaz de “ListViewController“.

Seleccionamos la celda del “ListViewController” y, en la propiedad “Identifier” le ponemos el nombre de “Cell“.

Añadimos un “Bar Button Item” a la “Navigation Bar” y seleccionamos “Add” en el “Identifier” del “Bar Button Item“.

Agregamos dos “ViewController“, uno para “DetailViewController” y otro para “ModalViewController“. Insertamos en los “ViewController” los componentes necesarios para tener el mismo resultado que en la Clase 6.

Enlazamos los “ViewController” al “ListViewController” para hacer la navegación de la aplicación.

Primero enlazamos “ModalViewController“. Como vamos a mostrar la escena cuando le demos al botón “+“, pulsamos el botón izquierdo del ratón + Ctrl y lo arrastramos hasta el “ModalViewController“. Seleccionamos el tipo de transición “Modal“.

Vamos a enlazar “DetailViewController“. En este caso, vamos a enlazarlo desde la celda del “TableView” y seleccionamos el tipo de transición “Push“.

El Storyboard ha de tener el siguiente aspecto.

Puntos a tener en cuenta en el Storyboard:

  • Enlazar la escena del Storyboard con la clase a la que pertenece.
  • Poner identificador al enlace creado para poder acceder a él.
  • Cuando trabajamos con Storyboard no es necesario editar el fichero “AppDelegate.m” para arrancar desde alguna escena.

Empezamos la edición de ficheros con “ModalViewController.h”. Vamos a declarar el “delegate” con un método que es obligatorio que esté implementado en la escena padre.

El método es “newContact” y es el encargado de agregar un contacto nuevo al listado.

Declaramos el objeto “delegate”, dos “IBOutlet” para los “UILabel” (uno para “nameTextField” y otro para “surnameTextField”) y dos “IBAction” (“saveNewContact” y “cancelNewContact”).

Abrimos el fichero “ModalViewController.m” y añadimos los @synthesize de “delegate”, “nameTextField” y “surnameTextField”.

Lo último que haremos en la edición del fichero es programar los métodos que harán la funcionalidad de dar de alta a un nuevo contacto y cancelar el alta del nuevo contacto.

Abrimos ahora el fichero “DetailViewController.h” en el que declaramos un “NSDictionary”, en el que guardaremos la información de la fila seleccionada, y Dos “IBOutlet”, con los que mostraremos la información por pantalla.

Una vez declarado todo lo que necesitamos en el “DetailViewController.h”, abrimos el fichero ”DetailViewController.m”. Como siempre, lo primero que haremos será hacer @sinthesize de todos lo objetos declarados en “DetailViewController.h”.

Buscamos el método “viewDidLoad” y añadimos el título de la escena, además de rellenar los “IBOutlet” con la información de la celda seleccionada.

Por último, tenemos que programar los ficheros “ListViewController.h” y “ListViewController.m”.

Abrimos el fichero “ListViewController.h” e importamos “ModalViewController.h” para que “ListViewController” pueda soportar el “delegate” de ModalViewController. También declaramos la estructura donde guardaremos la información de la lista. La hemos llamado “items” y es un objeto de la clase “NSMutableArray”.

Ahora vamos a editar el fichero “ListViewController.m”. Importamos “DetailViewController.h” y “ModalViewController.h”. Declaramos el @sinthesize del objeto “NSMutableArray” “items” que hemos declarado anteriormente en el fichero “ListViewController.h”.

En el método “viewDidLoad” inicializamos el objeto “items” y añadimos un título a la escena, nosotros le hemos llamado “Contactos”.

Ahora vamos a insertar en la “UITableView” los datos asignados, anteriormente, a la “NSMutableArray”. Para hacer esto, hay que modificar 3 métodos:

  • numberOfSectionsInTableView: En él indicamos el número de secciones que vamos a tener en nuestro listado.
  • numberOfRowInSection: En este método vamos a indicar el número de filas que tendrá una sección.
  • cellForRowAtIndexPath: Es el método donde configuraremos la fila en cuestión para que se muestre la información deseada.

Creamos el método obligatorio que ha de contener “ListViewController” debido a la declaración del “delegate” de “ModalViewController”. La función que ha de desempeñar el método es la de añadir el objeto “item”, que recibe de “ModalViewController”, a la lista “items”.

Ahora, vamos a hacer un método, en el cual vamos a discriminar los dos enlaces creados en el Storyboard. Este método es por el que tenemos que poner un “Identifier” en cada transición.

El método será el encargado de pasar la información de una escena a otra con la propiedad “segue.destinationViewController”.

El último paso es enlazar todos los objetos que tienen funcionalidad con los diferentes “IBOutlet” y “IBAction”.

Para finalizar la aplicación, vamos a enlazar los componentes con sus métodos u objetos correspondientes.

Como venimos repitiendo en algunas clases de este tutorial, para enlazar un objeto del “XIB”, simplemente, arrastramos el ratón con la combinación Ctrl + botón izquierdo desde el origen al destino. En el caso de los “IBOutlet”, desde “File’s Owner” hasta los componentes de texto, y en el caso de los “IBAction” el proceso de enlace es al revés, desde el componente al “File’s Owner”.

Probamos el funcionamiento de la aplicación.

Con esta clase terminamos el Curso de Programación iOS.

Quiero agradecer a todos los que habéis seguido el curso porque ha sido muy gratificante leer todas las dudas generadas y las muestras de apoyo que nos habéis dado.

Esperamos que este curso os haya sido de gran ayuda para iniciaos en el mundo de la programación de aplicaciones móviles.

Un saludo!!!

Leer Mas

14

may

Tutorial, como hacer downgrade a iOS 5.0.1 con Redsn0w en iPhone 4S

,

14 de mayo de 2012 a las 15:52

Tutorial, como hacer downgrade a iOS 5.0.1 con Redsn0w en iPhone 4S

Trás la actualización de Redsn0w para  elaborar Custom Firmware con los SHSH obtenidos con TinyUmbrella os ofrecemos un sencillo tutorial con el que poder realizar un downgrade o bajada de versión con nuestros SHSH.

Principalmente recomendamos el método para dispositivos como iPhone 4S, iPad 2 o Nuevo iPad ya que para los anteriores dispositivos recomendamos usar el tutorial de iFaith....

Leer Mas

,

8

may

10n1c muestra Jailbreak de iOS 5.1.1 en su Nuevo iPad

,

8 de mayo de 2012 a las 14:56

10n1c muestra Jailbreak de iOS 5.1.1 en su Nuevo iPad

El hacker 10n1c, tras las disputas con Pod2G y otros miembros de la scene hace poco, publica una imagen de su Nuevo iPad con Jailbreak en iOS 5.1.1.

Esta noticia nos indica que al menos su método sigue funcionando en iOS 5.1.1 y por tanto es muy probable como esperábamos, que los exploit que encontró Pod2G sigan funcionando por lo que finalmente veamos directamente el Jailbreak Untethered en iOS 5.1.1...

Leer Mas

2

may

Un truco de iOS 5, captura fotos remotamente

,

2 de mayo de 2012 a las 13:09

Un truco de iOS 5, captura fotos remotamente

Con la salida de iOS 5 ya os enumeremos las nuevas funciones y trucos que podíamos realizar sobre iOS 5.

Hoy os recordamos a los que aún no lo sepan un nuevo truco que entonces no conocíamos. La posibilidad de realizar fotos remotamente sin necesidad de instalar nada adicionalmente, es una función integrada de iOS 5 como muchas de las otras que hemos comentado en otras ocasiones...

Leer Mas

30

abr

Curso de Programación iOS. Clase 6: insertar elementos en UITableViewController

,

30 de abril de 2012 a las 23:08

Curso de Programación iOS. Clase 6: insertar elementos en UITableViewController

Bienvenidos a la Clase 6 del Curso de Programación iOS de iPhone4Spain.

En esta clase, veremos cómo añadir información en un objeto de la clase “UITableView” entre distintas escenas a través del patrón “delegado” (delegate). La utilización de este patrón nos ayudará a, en un momento dado, reorganizar las escenas sin que esto suponga algo muy laborioso ya que el patrón “delegado“ hace que el padre sólo contenga aquellos métodos que el hijo necesita.El ejemplo que vamos a explicar en esta clase, consiste en una “UITableView” en la que podemos añadir celdas con información previamente añadida. También tendremos acceso a un “UIViewController” donde se mostrará el detalle de la celda seleccionada. Cargaremos datos en la “UITableView” desde un “NSMutableArray”.

Creamos un proyecto vacío, lo vamos a llamar “Clase6”.

Una vez se ha generado todo el proyecto agregaremos los ficheros “Objective-C class“.

En el ejemplo de hoy tenemos dos “UIViewController” que las hemos llamado “DetailViewController” y “NewElementViewController“. También agregamos un “TableViewController” que lo hemos llamado “ListViewController“.

La estructura de ficheros de nuestro programa tiene el siguiente aspecto.

Abrimos el fichero “AppDelegate.m”. Creamos el objeto de la clase “ListViewController”, también creamos un objeto de la clase “UINavigationController” y lo inicializamos con “initWithRootViewController” al objeto “ListViewController” anteriormente creado. Asignamos el objeto “UINavigationController” a “rootViewController” para que sea la escena que se abra cuando arranquemos la aplicación.

Abrimos el fichero “NewElementViewController.h”. Declaramos el protocolo “NewElementDelegate”. En él se pueden declarar métodos que puede o tiene que llevar la clase padre de “NewElementViewController”, en este caso “ListViewController”. Indicamos, con el siguiente código, que “ListViewController” tiene que llevar implementado el método “newContactDidChanged” ya que, al no indicar nada. Al no definirlo con @optional, por defecto es @require. También se puede definir como @require pero el efecto sería el mismo.

Dentro de “@interface NewElementViewController” declaramos tres propiedades: La primera es el propio “delegate”, la segunda y la tercera son dos “IBoutlet” de la clase “UITextField”. Seguidamente declaramos dos “IBAction”, “saveNewContact” y “cancelNewContact”, que se encargarán de hacer la funcionalidad de los botones cuando éstos sean pulsados.

Una vez hecho el paso anterior, el siguientes es abrir el fichero “NewElementViewController.m” y hacer “@synthesize”  de todos los objetos declarados en el “NewElementViewController.h” para que el compilador genere el código para crear los métodos accesorios para sus propiedades.

Ahora implementamos los métodos, “saveNewContact” y “cancelNewContact”, anteriormente declarados en “NewElementViewController.h”.

El método “saveNewContact” guardará los datos introducidos en los dos “UITextField” en el objeto “NSMutableDictionary” que creamos al entrar en el método. Una vez hecho esto saldrá de la escena con la propiedad “dismissModalViewControllerAnimated”.

El método “cancelNewContact”, simplemente saldrá de la escena modal con la propiedad  “dismissModalViewControllerAnimated”.

En el “NewElementViewController.xib” y enlazamos, tanto los “IBOutlet” con los “UILabel” correspondientes, como los “IBAction” con los “UIButton” correspondientes.

Vamos ahora a modificar el fichero “DetailViewController.h”.

En él vamos a declarar tres @property:

  • NSMutableDictionary item” -> contendrá la información de la fila seleccionada de la “UITableViewController”.
  • IBOutlet UILabel nameLabel” -> en el que guardaremos el nombre del contacto seleccionado de la lista.
  • IBOutlet UILabel surnameLabel” -> en el que guardaremos el apellido del contacto seleccionado de la lista.

Abrimos ahora el fichero “DetailViewController.m” y hacemos @synthesize de las @property que hemos declarado en el fichero “DetailViewController.h”.

Buscamos el método “viewDidLoad” y asignamos a la propiedad “text” de los “IBOutlet” cada uno de los campos que el objeto “item” tiene.

En “DetailViewController.xib” hay que enlazar los “IBOutlet” con sus correspondientes componentes.

En el fichero “ListViewController.h” vamos a declarar una @property, “items”, donde almacenaremos todos los datos de la lista. Además, vamos a declarar un “IBAction”, el cual será el encargado de abrir la escena de en la que añadiremos contactos a la lista.

Abrimos el fichero “ListViewController.m”, importamos “DetailViewController.h” y “NewElementViewController.h”, y hacemos @sinthesize de la @property declarada en “ListViewController.h”.

En el método “viewDidLoad” tenemos que inicializar el objeto “items”, le vamos a poner un título a la escena “ListViewController” y creamos un “rigthBarButtonItem” el cual ejecutará el método declarado anteriormente “addElement”.

Ahora vamos a insertar en la “UITableView” los datos asignados, anteriormente, a la “NSMutableArray”. Para hacer esto, hay que modificar 3 métodos:

  • numberOfSectionsInTableView: En él indicamos el número de secciones que vamos a tener en nuestro listado.
  • numberOfRowInSection: En este método vamos a indicar el número de filas que tendrá una sección.
  • cellForRowAtIndexPath: Es el método donde configuraremos la fila en cuestión para que se muestre la información deseada.

Al arrancar la aplicación no habrá ningún dato en la lista, por lo que primero tenemos que añadir un contacto.

Implementamos el método “IBOutlet” “addElement”, en el que mostraremos la escena modal.

También hay que implementar el método “newContactDidChanged” en el que asignamos los nuevos contactos a la lista y actualizamos el “UITableView”.

Por último, vamos a “ListViewController.xib” y enlazamos todos los “IBAction” y “IBOutlet“.

Ejecutamos y comprobamos el funcionamiento de la aplicación.

La clase de hoy y la última, que será publicada el lunes 7 de mayo, no tendrán ejercicio propuesto. De esta manera podréis aprovechar y repasar las clases anteriores del curso. Intentad combinar los ejercicios vistos con anterioridad para practicar.

Un saludo y hasta la próxima clase!!!

Leer Mas

28

abr

Tutorial: Cómo transferir contactos desde un Android hasta un iPhone

,

28 de abril de 2012 a las 19:41

Tutorial: Cómo transferir contactos desde un Android hasta un iPhone

Si actualmente tienes un Android, pero quieres hacerte con un iPhone, existe un pequeño problema que muchos no saben solucionar y llena de dudas al usuario, ¿Qué pasará con mis contactos del teléfono? ¿Se borrarán? ¿Los tengo que pasar uno a uno al iPhone cuando encienda este?
Estas y otras dudas os las explicaremos en este pequeño tutorial en el que os comentaremos los pasos que debemos seguir para transferir nuestros contactos y calendarios desde un Android a un iPhone....

Leer Mas

28

abr

Curso de Programación iOS. Clase 5: solución y explicación del ejercicio propuesto

,

28 de abril de 2012 a las 15:41

Curso de Programación iOS. Clase 5: solución y explicación del ejercicio propuesto

Bienvenidos a la solución y explicación del ejercicio propuesto de la Clase 5 del Curso de Programación iOS de iPhone4Spain.

Cómo ya vimos en la Clase 5, veremos cómo crear un listado y un detalle utilizando el protocolo delegado (delegate).

Este protocolo nos permitirá realizar aplicaciones mucho mejor acabadas y nos facilitará el proceso de reestructurado de la aplicación, siempre que éste sea necesario.

Empezaremos, como siempre, creando un nuevo proyecto “Empty Application” y le escribimos un nombre. Nosotros lo hemos llamado “EjercicioClase5“.

Añadimos dos nuevos ficheros. Uno subclase de “UITableViewController” y el otro subclase de “UIViewController“. En ambos seleccionamos la opción “With XIB for user interface” para que genere la interfaz de usuario.

El “UITableViewController” es el que vamos a utilizar para hacer el listado de elementos. Lo hemos llamado “ListViewController“.

El “UIViewController” lo utilizaremos para realizar el detalle, en el que mostraremos la información de la celda y podremos realizar la modificación de su texto. Lo hemos llamado “DetailViewController“.

La estructura de ficheros que tendrá la aplicación es la que vemos en la siguiente imagen.

Abrimos el fichero “AppDelegate.m” para editarlo. Queremos que la aplicación se abra en la interfaz del listado y, cuando pulsemos una celda, realice una transición hacia el detalle.

Para conseguir este primer requisito, lo primero que haremos será importar “ListViewController.h“.

Creamos un objeto de la clase “ListViewController” y creamos otro de la clase “UINavigationController“, que será el encargado de realizar la transición. En la declaración del objeto “UINavigationController“, utilizaremos el objeto de “ListViewController” para igualarlo al método “initWithRootViewController“.

Igualamos, en la propiedad “rootViewController” de “window“, el objeto de “UINavigationController“.

Vamos a empezar haciendo el detalle para ver qué es lo que necesitamos en el listado.

Primero editamos el fichero “DetailViewController.h“.

Lo primero que hay que hacer es crear el “@protocol“. Lo llamamos “DetailDelegate” y le decimos que la clase que soporte este delegado tiene que contener implementado, de manera opcional “@optional“, el método “nameDidChange“.

Dentro de “@interface” crearemos la propiedades de “DetailViewController“: “delegate” y “cellName“. Además, crearemos un “IBOutlet” para el “UITextField” de la interfaz y un “IBAction” para el botón que cambia el nombre de la celda.

En el fichero “DetailViewController.m” hacemos “@synthesize” de las propiedades declaradas en “DetailViewController.h” y programamos el “IBAction“.

En el método “viewDidLoad“, cambiamos el título de la interfaz y el texto del “UITextField“.

El “IBAction” se encargará de cambiar el nombre de la celda. Para ello, trabajamos con el método que ha de tener la clase que soporta el protocolo. También vuelve a la interfaz de la lista.

Una vez hecho el detalle, vamos a hacer el listado.

Editamos el fichero “ListViewController.h“.

Haremos que “ListViewController” soporte el delegado de detalle “<DetailDelegate>” y creamos dos propiedades: cells y selectIndex.

Por último, vamos a editar el fichero “ListViewController.m“.

Lo primero que haremos es “@synthesize” de las propiedades declaradas en “ListViewController.h“.

Creamos el método “didReceiveMemoryWarning” que va a controlar posibles avisos de memoria.

Editamos el método “viewDidLoad” en el que cambiaremos el “title” de la interfaz y rellenaremos “cells” con información.

En el método “numberOfSectionsInTableView“, hacemos que devuelva 1 y, en el método “numberOfRowsInSection“, que devuelva el contador de “cells“.

Editamos el método “cellForRowAtIndexPath” para que, el “textLabel” de cada celda, coja el texto de cada uno de los valores de “cells“.

En el método “didSelectRowAtIndexPath” es donde crearemos el objeto de “DetailViewController” e igualaremos el delegado de “DetailViewController” con “self“. Es lo más importante del ejercicio.

Por último, creamos el método encargado de cambiar el nombre de la celda.

Sólo queda enlazar todos los “IBOutlets” y “IBActions” a sus correspondientes elementos de la interfaz.

Ejecutamos la aplicación y probamos que todo funciona correctamente.

Con la solución del ejercicio propuesto damos por terminada la Clase 5 del Curso de Programación iOS de iPhone4Spain.

Un saludo!!!

Leer Mas

25

abr

Tutorial: Liberar iPhone con SAM, SAM actualizado

,

25 de abril de 2012 a las 20:03

Tutorial: Liberar iPhone con SAM, SAM actualizado

Hace un par de días os hablemos de SAM y ayer dediquemos una entrada tras comprobar que funciona pese a ser una versión beta. Es un método novedoso para liberar nuestros iPhone sin depender del BaseBand que tengamos y válido para todas las versiones de iOS hasta la fecha. Podéis saber mas acerca de SAM desde la entrada de ayer.

A lo largo de esta madrugada y día SAM recibió la actualización que se comentó que llegaría para facilitar aún mas el proceso con diversas mejoras y añadidos como poder clonar una SIM...

Leer Mas

, ,

23

abr

Curso de Programación iOS. Clase 5: listado y detalle con patrón delegado

,

23 de abril de 2012 a las 23:11

Curso de Programación iOS. Clase 5: listado y detalle con patrón delegado

Bienvenidos a la Clase 5 del Curso de Programación iOS de iPhone4Spain.

En esta clase, veremos cómo pasar información entre distintas escenas a través del patrón “delegado” (delegate). La utilización de este patrón nos ayudará a, en un momento dado, reorganizar las escenas sin que esto suponga algo muy laborioso ya que el patrón “delegado“ hace que el padre sólo contenga aquellos métodos que el hijo necesita.El patrón “delegado” hace el hijo no tenga que incluir(con “import”) la cabecera del padre. Es esto lo que hace al patrón “delegado” algo muy útil para este tipo de aplicaciones.

El ejemplo que vamos a explicar en esta clase, consiste en una “UITableView” en la que tendremos acceso a un “UIView” donde se mostrará el detalle de la celda seleccionada. Para hacerlo un poco más complejo, veremos cómo cargar datos en la “UITableView” desde un “NSMutableArray”.

Creamos un proyecto “Empty Application“.

Lo vamos a llamar “Clase5”.

Ahora vamos a añadir, en el proyecto, dos ficheros con sus correspondientes interfaces de usuario.

El primer fichero va a ser del tipo “Objective-C class” y de la subclase “UITableViewController“.

Lo vamos a llamar “ListViewController“. Va a ser la lista de elementos.

También seleccionamos “With XIB for user interface” para que se generen las interfaces.

El segundo fichero que vamos a insertar va a ser “Objective-C class” pero, en este caso, va a ser subclase de “UIViewController“.

Lo hemos llamado “DetailViewController“. Es el detalle de cada elemento de la lista.

Como siempre solemos hacer, agrupamos todos los ficheros insertados, en carpetas.

En la siguiente imagen podemos ver cómo tiene que ser la estructura de nuestro proyecto.

Vamos a pasar ya a la programación de los ficheros.

Abrimos el fichero “AppDelegate.h”. Creamos el objeto instanciado de la clase “ListViewController” y un objeto “UINavigationController” el cual lo inicializamos con “initWithRootViewController” para que “ListViewController” sea la escena que se abra cuando arranquemos la aplicación.

Vamos a empezar a realizar el detalle para declarar el patrón “delegado” y los demás componentes que nos hará falta.

Seleccionamos “DetailViewController.xib” y añadimos los componentes que vamos a utilizar para mostrar la información. Añadimos dos “UILabel” en el que mostraremos el nombre del campo y el titulo de la celda seleccionada anteriormente. Además agregaremos un “UIButton” que va a realizar la misma función volver que realiza el “Navigation Item” que aparece en la “Navigation Bar” pero nos servirá para ver la instrucción que realiza internamente el “Navigation Item”.

Abrimos el fichero “DetailViewController.h” y añadimos lo siguiente:

Declaramos el protocolo “DetailDelegate”. En él se pueden declarar funciones que puede o tiene que llevar la clase padre de “DetailViewController”, en este caso “ListViewController”. Como “ListViewController” no tiene que hacer ninguna funcionalidad lo dejaremos vacío.

Dentro de “@interface DetailViewController” declaramos dos propiedades: La primera es un “NSString” que se llamará “cellName” que se encargará de guardar el nombre de la celda y la segunda es el propio “delegate”. También dentro de “@interface DetailViewController” declaramos el “IBOutlet” del “UILabel” que contendrá el título de la celda y un “IBAction” llamado “returnButton“, que se encargará de hacer la funcionalidad del botón cuando éste sea pulsado.

Una vez hecho el paso anterior, el siguientes es abrir el fichero “DetailViewController.m” y hacer “@synthesize”  de todos los objetos declarados en el “DetailViewController.h” para que el compilador genere el código para crear los métodos accesorios para sus propiedades.

Cuando entremos al detalle de una celda de “ListViewController” mostramos su nombre en el “title” de la escena y también en el “label” que hemos declarado antes.

Lo último que hay que programar en el “DetailViewController.m” es la funcionalidad del botón que tiene la escena. El botón lo que va a hacer es volver a “ListViewController” con el método de la clase “UINavigationController” “popViewControllerAnimated”.

Una vez realizada toda la programación de “DetailViewController” vamos a empezar a hacer la programación de “ListViewController”.

Abrimos el fichero “ListViewController.h” y añadimos “<DetailDelegate>” en la declaración de la “@interface” para que el compilador sepa que la “@interface” soporta el delegado de “DetailViewController”.  Para ello, tenemos que importar “DetailViewController.h”.

Lo siguiente es declarar el “NSMutableArray” que contendrá la información de las celdas y un “int” en el que captaremos el índice de la celda seleccionada.

Ahora volvemos a abrir “DetailViewController.xib” y realizamos los enlaces de los “IBOutlet” y “IBAction” con los diferentes objetos declarados en la escena, tal y como lo hemos hecho en clases anteriores del Curso de Programación iOS de iPhone4Spain.

Una vez hecho el paso anterior, abrimos el fichero “ListViewController.m”. Primero hacemos el “@synthesize” de las “@property” anteriormente declaradas.

Buscamos el método “viewDidLoad” y rellenamos el objeto “cells” con la información deseada. En este ejemplo, vamos a escribir el texto “Celda ” y el número correspondiente a esa celda. El método quedará como vemos en la siguiente imagen.

Hay que tener en cuenta que no estamos insertando nada en la “UITableView”, sino que estamos insertando la información en la lista que tenemos en memoria (“NSMutableArray”), por lo que en pantalla no aparecerán los datos si ejecutamos la aplicación. Es un ejemplo similar al que tendríamos si tuviésemos una base de datos.

Ahora vamos a insertar en la “UITableView” los datos asignados, anteriormente, a la “NSMutableArray”. Para hacer esto, hay que modificar 3 métodos:

  • - numberOfSectionsInTableView: En él indicamos el número de secciones que vamos a tener en nuestro listado.
  • - numberOfRowInSection: En este método vamos a indicar el número de filas que tendrá una sección.
  • - cellForRowAtIndexPath: Es el método donde configuraremos la fila en cuestión para que se muestre la información deseada.

Como vemos en la imagen anterior, en el método “cellForRowAtIndexPath” es donde modificamos el contenido del “UITableView”. Con la instrucción “cell.textLabel.text = [self.cells objcectAtIndex:indexPath.row]”, se selecciona cada celda de “cells” con el índice “indexPath.row” y lo insertamos en la propiedad “text” del “textLabel” del objeto “cell”.

Por último, nos queda llamar a la escena “DetailViewController” cuando seleccionamos una fila del ”UITableView”.

Nos dirigimos al método “didSelectedRowAtIndexPath” y simplemente creamos una instancia de “DetailViewController”, asignamos la información de la celda seleccionada, indicamos el índice de la celda seleccionada, igualamos el delegate a self y hacemos “pushViewControler” para pasar a “DetailViewController”.

Por último, ejecutamos la aplicación y comprobamos que funciona correctamente.

El ejercicio propuesto para esta semana consta de un listado y un detalle como el que hemos realizado hoy, pero en el detalle vamos a tener que poder modificar el texto de la celda seleccionada.

El ejercicio propuesto es algo difícil pero hay que intentarlo.

El viernes 27 de abril publicaremos la solución del ejercicio.

Un saludo!!!

Leer Mas

20

abr

Curso de Programación iOS. Clase 4: solución y explicación del ejercicio propuesto

,

20 de abril de 2012 a las 23:10

Curso de Programación iOS. Clase 4: solución y explicación del ejercicio propuesto

Bienvenidos a la solución y explicación del ejercicio propuesto de la Clase 4 del Curso de Programación iOS de iPhone4Spain.

Vamos a enseñar cómo hacer un listado con el componente “TableViewController“.

Como dijimos en la Clase 4, es un componente muy utilizado en las aplicaciones que contienen listados.Empezamos la explicación creando un proyecto nuevo. “File -> New -> Project…“.

Seleccionamos “Empty Application“.

Nombramos el proyecto. Nosotros le hemos puesto el nombre de “EjercicioClase4“.

Ahora vamos a añadir una clase “UITableViewController”  en la que vamos a mostrar el listado.

Añadimos los ficheros.

Seleccionamos “Objective-C class“.

Elegimos “UITableViewController” en el apartado “Subclass of“.

Marcamos “With XIB for user interface” para que, a la vez, cree el fichero .xib con la interfaz de usuario.

Por último, le damos un nombre. Nosotros lo hemos llamado “ListViewController“.

Agrupamos todos los fichero creados en carpetas para tener ordenado el proyecto.

Editamos, ahora, el fichero “AppDelegate.m” para que arranque la aplicación en el listado.

Importamos “ListViewController“. Buscamos el método “didFinishLaunchingWithOptions” en el que creamos un objecto de la clase “ListViewController” y lo asignamos a la propiedad “rootViewController” de “window“.

Ahora, vamos a editar el fichero “ListViewController.m“.

Buscamos los métodos “numberOfSectionsInTableView“, “numberOfRowsInSection” y “cellForRowAtIndexPath

Editamos estos métodos para que el listado cumpla con los requisitos del enunciado.

Ejecutamos y comprobamos que funciona correctamente.

Con la solución del ejercicio propuesto damos por terminada la Clase 4 del Curso de Programación iOS de iPhone4Spain.

Siguiente clase: Clase 5, listado y detalle con patrón delegado.

Un saludo!!!

Leer Mas

20

abr

Tutorial iFaith, crea un Custom Firmware de iOS 5.0.1 parte 2

,

20 de abril de 2012 a las 22:23

Tutorial iFaith, crea un Custom Firmware de iOS 5.0.1 parte 2

Tras el tutorial para guardar los SHSH con iFaith de nuestro iOS 5.0.1, hoy os mostramos el segundo paso, crear un Custom Firmware de iOS 5.0.1 con nuestros SHSH.

Este paso es fundamental para poder realizar los downgrade o restauraciones sin subir la versión de iOS cuando ya hay una mas reciente....

Leer Mas

, ,

19

abr

Tutorial iFaith, guarda los SHSH de iOS 5.0.1 parte 1

,

19 de abril de 2012 a las 19:15

Tutorial iFaith, guarda los SHSH de iOS 5.0.1 parte 1

iFaith es una herramienta para Windows que permite guardar los SHSH y hacer un Custom Firmware con ellos. Esto nos permite restaurar nuestro dispositivo siempre que lo deseemos con esa versión de iOS aunque existan versiones de iOS mas recientes.

Ya os mostremos un tutorial anteriormente para hacerlo con la versión iOS 5.0 y el proceso es similar pero para los nuevos usuarios os mostraremos un nuevo tutorial mas detallado, gracias al nuevo sistema de tutoriales de iPhone4Spain, con los enlaces de descarga actualizados...

Leer Mas

, ,

Página 3« Ir a Primera...234...