Mostrando entradas con la etiqueta thebestandroide. Mostrar todas las entradas
Mostrando entradas con la etiqueta thebestandroide. Mostrar todas las entradas

iOS : Ejercicio 8. Creando Table View II

Blog >Lista ejercicios >  Ejercicio 8


Hola compañeros, vamos a ver como hacer un Table View, más personalizado.



Ejercicio 8: Crear un Table View más personalizado.

Vamos a tirar del ejercicio anterior y partir desde esa base, en él apararece una UITableView con simplemente un texto estático que poníamos en la función cellForRowAtIndexPath, concretamente en la fila :

celda.textView.text=@"ValorcualquieraDeNombre";

Comenzamos arrastrando al proyecto 7 imágenes imágenes, el numero da igual.
 
Bien, ahora vamos a cambiar el estilo del elemento UITableViewCell en la función cellForRowAtIndexPath, que como recordaremos, es la encargada de insertar los items en las celdas de la tabla.

Al crear la celda hay que indicar la propiedad initWithStyle. En este caso, lo que haremos es cambiar el estilo que teníamos por este : UITableViewCellStyleSubtitle que nos permite además de introducir un textLabel,una descripcción y una imagen distinta, para hacer la tabla más dinámica.


//METODO QUE INTRODUCE LOS VALORES DEL ARRAY EN LAS CELDAS

-(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    //RECUPERAMOS ARRAY SEGUN LA POSICION DE LA FILA
    Personaje *fila = [[Personaje alloc] init];
    fila=[items objectAtIndex:indexPath.row];

    //CREAMOS LA CELDA
    UITableViewCell *celda =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];

    //COPIAMOS LA VARIABLE DEL ARRAY EN LA FILA

    celda.textLabel.text=@"Celda Tabla";
    celda.detailTextLabel.text=@"Detalle";
    celda.imageView.image=[UIImage imageNamed:@"heroe2.jpg"];
    celda.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    //DEVOLVEMOS LA CELDA
    return celda;
}

Si os fijais bien en el código, donde antes sólo se podia escribir celda.textLabel, ahora hay otras propiedades como detailTextLabel o imageView e incluso le he metido el accessoryType que es la flechita de la derecha de la celda.
De las imágenes que os he comentado al principio, he usado una de ellas :




Hay muchas formas de hacerlo, pero como estamos de novatos, vamos a trabajar la programación, es decir vamos a crear una nueva clase de Objetive-C que contenga dos String (osea el nombre y la descripción) y una imagen. Esta es la clase contenedora que  almacena los datos de cada celda para hacer el array de objetos que contenga todos los datos.Yo la he llamado Personaje, y hereda de NSObject

Primero va código del .h y después código del .m

#import 

@interface Personaje : NSObject

@property (nonatomic,strong)NSString *Nombre;
@property (nonatomic,strong)NSString *Descripcion;
@property (nonatomic,strong)UIImage *imagen;

@end



#import "Personaje.h"


@implementation Personaje

@synthesize Nombre;
@synthesize Descripcion;
@synthesize imagen;

@end

Entonces, ahora vamos a llenar el array de forma un poquito más dinamica como dije antes,en el ejercicio anterior recordemos que estaba en el método viewDidLoad, que es el método que se ejecuta nada más empezar la app.

Así que ahora creo una función que he llamado InsertarItems donde cargamos todos los objetos Personaje en el NSMutableArray y la llamamos desde este método.

- (void)viewDidLoad

{
    [super viewDidLoad];
    self.InsertarItems;
}

-(void)InsertarItems{

    //RESERVAMOS MEMORIA PARA LOS ITEMS DEL ARRAY
    items = [[NSMutableArray alloc] init];

    //RESERVAMOS MEMORIA
    Personaje* p1= [[Personaje alloc] init];
    //RELLENAMOS CAMPOS DE LA CLASE PERSONAJE
    p1.Nombre = [[NSString alloc] initWithFormat:@"Monkey D Luffy"];
    p1.Descripcion = [[NSString alloc] initWithFormat:@"Futuro Rey pirata"];
    p1.imagen = [UIImage imageNamed:@"heroe2.jpg"];

    //REPETIMOS EL PROCESO CON TANTOS PERSONAJES COMO QUERAMOS METER
    Personaje* p2= [[Personaje alloc] init];
    p2.Nombre = [[NSString alloc] initWithFormat:@"Fhash"];
    p2.Descripcion = [[NSString alloc] initWithFormat:@"Relámpago humano"];
    p2.imagen = [UIImage imageNamed:@"heroe1.jpg"];

    Personaje* p3= [[Personaje alloc] init];
    p3.Nombre = [[NSString alloc] initWithFormat:@"Jonh Constantine"];
    p3.Descripcion = [[NSString alloc] initWithFormat:@"Destructor de demonios"];
    p3.imagen = [UIImage imageNamed:@"heroe3.jpg"];
    
    Personaje* p4= [[Personaje alloc] init];
    p4.Nombre = [[NSString alloc] initWithFormat:@"Super Man"];
    p4.Descripcion = [[NSString alloc] initWithFormat:@"Clack Ken"];
    p4.imagen = [UIImage imageNamed:@"heroe4.jpg"];

    Personaje* p5= [[Personaje alloc] init];
    p5.Nombre = [[NSString alloc] initWithFormat:@"Joker"];
    p5.Descripcion = [[NSString alloc] initWithFormat:@"Payaso loco"];
    p5.imagen = [UIImage imageNamed:@"villano1.jpg"];

    Personaje* p6= [[Personaje alloc] init];
    p6.Nombre = [[NSString alloc] initWithFormat:@"Doctor Connor"];
    p6.Descripcion = [[NSString alloc] initWithFormat:@"Profesor universitario"];
    p6.imagen = [UIImage imageNamed:@"villano2.jpg"];

    Personaje* p7= [[Personaje alloc] init];
    p7.Nombre = [[NSString alloc] initWithFormat:@"Don quijote Don Flamingo"];
    p7.Descripcion = [[NSString alloc] initWithFormat:@"Shichibukai"];
    p7.imagen = [UIImage imageNamed:@"villano3.jpg"];
    
    //AÑADIMOS LOS PERSONAJES AL ARRAY
    [items addObject:p1];
    [items addObject:p2];
    [items addObject:p3];
    [items addObject:p4];
    [items addObject:p5];
    [items addObject:p6];
    [items addObject:p7];
}

Ahora volvemos a la función cellForRowAtIndexPath, para cambiar la carga estática de los elementos por los elementos del objeto Persnaje que vamos a ver a acontinuación :

 celda.textLabel.text=fila.Nombre;
    celda.detailTextLabel.text=fila.Descripcion;
    celda.imageView.image=fila.imagen;

Y este, es el resultado :




Disculpar el punto de frikismo, pero es lo que tiene ser informático...

Vamos a ir un paso más. Supongamos que queremos personalizar mucho más nuestra tabla, pues tendremos que ir al storyboard y arrastrar un componente UITableViewCell dentro de nuestro UITableView. Vamos a crear nuestra celda personalizada. Ahi insertaremos los dos labels y nuestra ImageView, e incluso yo he subido el ancho de nuestra celda, podemos personalizarlo a nuestro antojo.

El alto de celda se modifica mediante una función heightForRowAtIndexPath que también hay que implementar en el código:


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
 //EN MI CASO HE PUESTO DE ALTO 85
 return 85;
}

Creamos otra clase Objetive-C que herede de UITableViewCell con los elementos que pongamos dentro de la celda, yo la he llamado CeldaView. Esta celda es la que va a llevar las propiedades de nuestra celda que acabamos de crear y también necesitamos asignarlesa a la celda en el storyboard en el apartado CustomClass : CeldaView, y sobre todo muy importante en Identifier : IDCelda




 *NOTA : En el pantallazo, me he equivocado al poner IDCelda, una pestaña más a la derecha en el inspector de propiedades aparece la opción Identifier, es ahi donde hay que poner el IDCelda.

Aqui va el código CeldaView.h y CeldaView, no lo explico porque es bastante intuitivo :


@interface CeldaView : NSObject

@property (nonatomic,retain)IBOutlet IBLabel *Name;
@property (nonatomic,retain)IBOutlet IBLabel *Description;
@property (nonatomic,retain)IBOutlet IBImageView *img;

@end


#import "CeldaView.h"

@implementation Personaje

@synthesize Name;
@synthesize Description;
@synthesize img;

@end

Hacemos las conexiones a los elementos de la forma habitual :






Para ir finalizando, volvemos al ViewController.m. Ahí es donde tenemos que configurar otra vez la función cellForRowAtIndexPath que es la que se encarga de llenar las filas, tenemos que cambiarla para que coja la celda que hemos creado en vez la que viene por defecto, quedaría así :

//METODO QUE INTRODUCE LOS VALORES DEL ARRAY EN LAS CELDAS
-(UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    //RECUPERAMOS ARRAY SEGUN LA POSICION DE LA FILA
    Personaje *fila = [[Personaje alloc] init];
    fila=[items objectAtIndex:indexPath.row];
 //ANTIGUA CELDA
    /*CREAMOS LA CELDA
    UITableViewCell *celda =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
    //COPIAMOS LA VARIABLE DEL ARRAY EN LA FILA
 celda.textLabel.text=fila.Nombre;
    celda.detailTextLabel.text=fila.Descripcion;
    celda.imageView.image=fila.imagen;*/

 CeldaView *celda =[tabla dequeueReusableCellWithIdentifier:@"IDCelda"];
    //COPIAMOS LA VARIABLE DEL ARRAY EN LA FILA
 celda.textLabel.text=fila.Nombre;
    celda.detailTextLabel.text=fila.Descripcion;
    celda.imageView.image=fila.imagen;
 
    //DEVOLVEMOS LA CELDA
    return celda;
}

Y por fín, este es el resultado :







Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

ThebestAndroide : iOS

Este es el apartado del blog Thebestandroide dedicado a la programación a iOS, aquí explico  qué es iOS y como se usa :






iOS es el sistema operativo de Apple diseñado para el iPhone originalmente, y a posteriori se implementó para el iPod, iPad y Apple TV.

iOS deriva de Mac OS X, que esta basado en Darwin BSD, que es el sistema operativo que utilizaba Unix.

iOS se centra en un sistema que se conoce como manipulación directa con gestos multitáctiles como interruptores, botones o deslizadores.iOS cuenta entre otras cosas con cuatro capas de abstracción al usuario:




ARQUITECTURA SOFTWARE

La arquitectura del software está basada en capas. 

Son las capas de alto nivel la que aportan las funcionalidades necesarias a la hora de desarrollar aplicaciones :

  • COCOA TOUCH : Posee una ifraestructura básica usada para las aplicaciones (frameworks). Basada en el lenguaje de programación Objetive-C, uno de los lenguajes que soporta el IDE Xcode, que es mediante el cual se programan aplicaciones. Esta capa se compone de :
    1. Fundation framework : NSObject, que es el objeto del que que dependen todos los objetos que introduzcas en tu aplicación.
    1. UIKit framework : Trabaja con la vista de la aplicación.

    • MEDIA : Provee de tecnología 2D y 3D además de soporte para audio y video. Esta capa está basada en C y Objetive C.
      • MEDIACORE SERVICES Y CORE OS : Interfaces básicas que controlan los servicios básicos.

      En la página oficial de desarrolladores para Apple, encontrareis toda la información necesaria, podeis acceder desde aquí. 







      SDK de Xcode

      El SDK de iOS se compone de varias partes para poder programar app´s, y consta de estas partes :

      • XCODE : IDE que permite el desarrollo de aplicaciones para iOS y para MAC OS X, soporta múltples lenguajes,como C, C++, JAVA, AppleScript, y entre ellos objetive-C, que en realidad es un C preparadao exclusivamente para el sistema operativo Mac X OS, diseñado para editar, compilar y depurar código fuente.
      • INTERFACE BUILDER : Crea las interfaces gráficas y vinculadas con Xcode.
      • SIMULADOR iOS : Es el simulador para probar aplicaciones, cabe destacar que este simulador, es muchísimo más rápido que el que se usa para Android, y posiblemente las aplicaciones corran más rápido que en un dispositivo real. Así es Mac, genial...
      •  INSTRUMENTS : Prueba el rendimiento de la aplicación desarrollada, su uso de la memoria, su gestión, etc

      Este SDK esta integrado con los frameworks Cocoa y CocoaTouch, Live issues avisa de los errores de código y además, está en plena interacción con el portal Web de desarrolladores. Su compilador es Apple LLVM Compiler, además de tener un autocompletar el código en tiempo de desarrollo en tiempo real.

      Bien, para desarrolladores que ya sea porque no tengan recursos para obtener un MAC o porque no quieran gastarse el dinero para comprarse un ordenador sólo para aprender a programar en iOS, la solución es simple : Descargar VMWARE, su parche y una imagen de IOS, aunque ya os aviso que el proceso consta de 7 a 10 GB.

      Si quereis más información, consultar este post de la mano de los taringueros, aquí.

      Estoy trabajando en ello, pero ya podeis disponer de unos cuantos ejercicios básicos para empezar a programar en Objetive-C  que comparto a través de mi blog Thebestandroide.



      • Objetive C y la programación en Xcode
      1. Mensajes y tipos de datos
      2. Nonatomic y atomic
      3. Snippets en Xcode



      • Ejercicios básicos  iOS

      1. Cambiar de View Controler 
      2. Cambiar texto de label mediante click a botón
      3. Cambiar texto de label mediante click a botón II
      4. Cambiar ImageView mediante click a botón 
      5. Arquitectura Tab Bar
      6. Usar UINavigation Básico
      7. Hacer nuestra Lista de elementos
      8. Hacer nuestra Lista de elementos II
      9. Hacer nuestra Lista de elementos III
      10. Varios tipos de AlertDialog
      11. Localización
      12. MapView en tu dispositivo
      13. Acelerómetro y CMMotionManager
      14. Cámara y galería de fotos
      15. Multitasking I
      16. Multitasking II
      17. Multitasking III  
      18. Core Animation : Transición entre vistas  
      19. Reproducción de mp3  
      20. Reproducción de video  
      21. Cargar HTML, Javascript o una URL en un IUWebView  
      22. Facebook & Twitter  
      23. Accediendo al directorio Documents de nuestro iPhone



      ESPACIO EN CONSTRUCCIÓN, DISCULPEN MOLESTIAS







      Podeis descargar el código fuente de thebestandroide con sólo compartir en facebook,twitter,linkedin o suscribirte a nuestro canal RSS más abajo. 



      Compartir Compartir Compartir Compartir




      Developer solutions

      Blog > Lista Soluciones



      LISTA DE SOLUCIONES ANDROID DEVELOPER MOBILE


      • View Widgets
                TextView
                Cambiar color Java XML

                 ImputText
                 Contar caracteres de un ImputText mediante Java

                 LinearLayout
                 Manejar alto y ancho LinearLayout mediante Java

                 Button
                 Cambio diseño Button XML onClick()

                 ListView
                 Listview Texto + Image 


      • Vibracion
                Vibración dispositivo
                Vibración mediante del dispositivo mediante Java


      • Notificationes
                Notification Manager
                Notificaciones: nueva instancia y vuelta a la anterior

                Toast
                Toast con Imagen

                ContextMenu
                ContextMenu+RadioButton (I)

                ContextMenu+Imagen por iTem (II)



      • Preferencias
                Shared Preferences
                Guardar y cargar entero



      • Hardware Android
                Accediendo al dispositivo
                Usando TelephonyManager

                Sacar Fotografia
                Sacar foto onActivityResult()

                Calibrado de pantalla
                Vertical -> apaisado



      • Animaciones
                Frames
                Animacion XML/JAVA I 

                Programacion XML
                Animacion XML/JAVA II

      • Bitmaps
                Por referencia
                Bitmaps con SoftReference

      • Hilos
               AsinkTask
               Lanzamiento segundo hilo

      • Fragments
               Fragments
                Fragments en Android 
                Comunicación entre fragments

                Menu Fragments
                Drawer Menú para Fragments en Android 

               











      Compartir Compartir Compartir Compartir




      Sobre el blog Thebestandroide

      Blog THEBESTANDROIDE


      Blog > Sobre el blog

      Thebestandroide es un blog orientado a la programación basado en un intenso estudio profesional a base de profundizar en el combo de lenguajes por los que se construyen aplicaciones móviles, ya sea JAVA y XML para Android o Objetive-C para iOS.

      Incluye desde problemas básicos hasta errores complejos ya con soluciones para que tu aprendizaje en las plataformas Android e iOS tenga una fuente optimizada en castellano desde Internet. Thebestandroide cuenta con las siguientes características:

      • Basado en la plataforma Blogger. Blogger te permite publicar contenidos de forma rápida y muy sencilla, para que el blog esté siempre actualizado y los developers encuentren rapidamente la solución. 

      • Articulos completos y explicados, hay que tener en cuenta que el blog está pensado para esos desarrolladores que poseen ya conceptos avanzados de java y C. Hay fragmentos de código como instancias de objetos, en las que se presupone que ya se saben ciertos conceptos básicos.

      • Usa la herramienta SyntaxHighlighter para mostrar el código fuente en formato "programación", favorece la lectura rápida, ordenada y extructurada del código fuente.

      • Un tutorial para empezar desde 0 con Objetive-C en el apartado iOS del blog. Podeis acceder desde aquí.
      • Una lista de las soluciones publicadas a lo largo de este tiempo en Java para Android, podeis acceder desde aquí.
      • Una sección que hace la función de repositorio de código para conexiones en servidores, como JSON o Twitter desde aquí.

      • Mucho esfuerzo y ganas de aprender día a día, para compartir con todos vosotros los conocimientos aprendidos.
















      Compartir Compartir Compartir Compartir