iOS : Ejercicio 10. Distintos tipos de AlertDialog

Blog >Lista ejercicios >  Ejercicio 10


Hola desarrolladores,continuamos el tutorial de ejercicios con este que trata sobre los AlertViews.





Ejercicio 10 : Clase UIAlertView, Tipos de AlertViews 


Sólo se pueden crear mediante código, y nos va a permitir mostrar mensajes en la interfad de usuario. Forma parte del framework UIKit y se encarga de crear instancias de "avisos" o mensajes para iOS. 

Creamos un proyecto de la forma habitual, file - new - proyect - Single View Application.
Ahora en nuestro storyboard creamos un botón y un label, hacemos las conexiones necesarias y hacemos que el ViewController.h herede de UIAlertView.
El botón valdrá para que al pulsarlo se muestre el AlertView :





El código del ViewController.h con las conexiones a los objetos del storyboard :


@interface ViewController : UIViewController UIAlertViewDelegate
@property (strong, nonatomic) IBOutlet UILabel *label;
-(IBAction)AccionBoton:(id)sender;
@end


En el archivo ViewController.m nos apareció el método AccionBoton, que es el que va a ejecutar cualquier acción al pulsar el botón.Sólo pondremos ahí dentro [msg show] que es la instrucción para mostrar el Alert, ahora vamos al viewDidLoad, que es el que se usa para cargar datos según se ejecuta la aplicación, el código para implementar el AlertView es:


@implementation ViewController
//DECLARAMOS EL ALERT AQUI PARA QUE SE PUEDA USAR DESDE EL MÉTODO DEL BOTÓN
UIAlertView *msg
//TRAEMOS EL OBJETO LABEL DECLARADO EN EL .H
@synthesize label;
//Texto a mostrar
NSString *texto
- (void)viewDidLoad
{
 [super viewDidLoad]
 msg = [[UIAlertView alloc]
     initWithtitle :@"Este es el blog Thebestandroide"
     message :nil
     delegate :self
     cancelButtonTittle :@"Ok"
     otherButtonTitles:nil,nil];
}
-(IBAction)AccionBoton :(id)sender {
[msg show];
}
@end


Ejecutamos la aplicación, veremos que al pulsar sobre el botón, nos saldra nuestro AlertView :





Si implementamos el protocolo UIViewAlertDelegate proporcionaremos un objeto opcional que recibirá una notificación cuando el usuario pulse algún botón de la notificación.Y la instrucción [msg show] Muestra el aviso. Vamos a introducir más botones:

- (void)viewDidLoad
{
 [super viewDidLoad]
 msg = [[UIAlertView alloc]
     initWithtitle :@"Este es el blog Thebestandroide"
     message :nil
     delegate :self
     cancelButtonTittle :@"Ok"
     otherButtonTitles:@"Opcion 1",@"Opcion 2",@"Opcion 3",@"Opcion 4",nil];
}






Bien, ahora tenemos que asignarles funcionalidad a los botones, simplemente para saber que opción ha pulsado el usuario, a continuación pongo una serie de métodos importantes muy relevantes, usaremos los que nos convengan :


  • clickedButtonAtIndex : En el objeto delegado podremos saber qué botón se ha pulsado. El primer parámetro es una referencia que apunta a la ventana y el segundo es un entero que funciona de índice.
  • cancelButtonIndex : Guarda la posición del índice del botón de cancelación.
  • firstOtherButtonIndex : Indica el índice del primero de los botones especificados opcionalmente durante la creación del mensaje.



-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
 //EL 0 SUELE SER CANCEL BUTTON
 if(buttonIndex==0){
  texto=@"5";
 }
 if(buttonIndex==0){
  texto=@"1";
 }
 if(buttonIndex==0){
  texto=@"2";
 }
 if(buttonIndex==0){
  texto=@"3";
 }
 if(buttonIndex==0){
  texto=@"4";
 }
 label.text=texto;
}


Bien, entonces cada vez que elijamos una opción en nuestro label se cargará el texto que hemos condicionado, para que se ponga un valor por opción seleccionada, por ejemplo la "Opcion 4" :





Vamos ahora a darle estilos, el formato para darle estilo es así :


 msg = [[UIAlertView alloc]
     initWithtitle :@"Este es el blog Thebestandroide"
     message :nil
     delegate :self
     cancelButtonTittle :@"Ok"
     otherButtonTitles:@"Opcion 1",@"Opcion 2",@"Opcion 3",@"Opcion 4",nil];
msg.alertViewStyle = UIAlertViewStyleDefault;

Entonces :
msg.alertViewStyle = UIAlertViewStyleDefault;



msg.alertViewStyle = UIAlertViewStylePlainTextInput;




msg.alertViewStyle = UIAlertViewStyleSecureTextInput;



msg.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;



Ahora lo que vamos a ver es como recoger los campos de texto introducidos, por ejemlo en el estilo UIAlertViewStyleLoginAndPasswordInput, para ello, vamos a nuestro storyboard, creamos otro label, arrastramos la conexión como hemos echo con el primero, no os olvideis de la claúsula @syntetize en el .m y para finalizar, dejaremos la función clickedButtonAtIndex así :


-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
 //Recogemos los datos
 UITextField *user=[alertView textFieldAtIndex:0];
 UITextField *password=[alertView textFieldAtIndex:1];
 //Los implantamos en los label del storyboard
 label.text=[NSString stringWithFormat:@"Usuario : %@",user.text];
 pass.text=[NSString stringWithFormat:@"Password : %@",password.text];
}






Vualá!! ya esta!




Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

iOS : Ejercicio 9. Aplicando a Tabla UINavigationController

Blog >Lista ejercicios >  Ejercicio 9


Hola amiguetes programadores, hoy continuamos con el paso final del UITableView :




Ejercicio 9 : UITableView con UINavigationController.

Ya vimos en el ejercicio 8 como crear un TableView y aplicar muy poquita funcionalidad, lo podeis ver aquí.
Después en el ejercicio 9 vimos como personalizar nuestra tabla a antojo creando nosotros mismos las celdas con sus label o imagenes de forma dinámica ayudandonos de un array que también lo podreis ver desde aquí, pues bien, empezamos desde ahi, donde lo dejamos.

NOTA : Si eres novat@, necesitarás hacer los ejercicios 7 y 8 para empezar con este :





Dando funcionalidad a nuestra UITableView con UINavigationController.

Comenzamos arrastrando un UINavigationController al storyboard, borrando la pantalla de la derecha con la tabla y clickando en el NavigationControler+Ctrl arrastramos hacia nuestra tabla personalizada, ahi soltamos y elegimos la opción de Root View :





Aparecen entonces 2 flechas, la que sale de la nada es porque señala que es la primera vista que se ejecuta cuando iniciamos la aplicación, la segunda es para el Navigation Controller.
Pues bien, esto hay que cambiarlo, para que la flecha que sale de la nada apunte lo primero al NavigationController, esto se hace seleccionando este, y en inspector de atributos, en la cuarta pestañita, donde está la sección View Controller, hay un check box que dice Is Initial View Controller, seleccionamos y listo.

Como recordareis, en el método didSelectRowAtIndexPath teníamos el código necesario para que saltara un Alert Dialog con el nombre de la fila que habiamos seleccionado, pues bien, borramos el interior del método.


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

}
@end


Ahora creamos otra View Controller donde mostraremos los detalles del item de la tabla que se ha seleccionado, la personalizamos con 2 label y una imagen, además de crear una clase que llamamos detallesViewController que herede de UIViewController, además de asignarle un identificador.


El identifier en versiones anteriores de Xcode 5.0 está en la sección View Controller de la cuarta pestañita del inspector de atributos, a partir de esta versión en adelante se haya en la tercera pestañita bajo el nombre de StoryBoard ID, que en este caso será IDDetalle.





Abrimos la vista de "Assistant Editor" y teniendo en una ventana el storyboard y en otra el DetalleViewController.h clickamos en cada uno de los elementos+Ctrl y los arrastramos ahi, quedando la clase así :


@interface DetalleViewController:UIViewController
@property (weak, nonatomic) IBOutlet UILabel *Desc
@property (weak, nonatomic) IBOutlet UIImageView *img
@property (weak, nonatomic) IBOutlet UILabel *Nomb
}
@end

//NO OLVIDAR LOS @Synthesize DE LOS ELEMENTOS EN EL DetalleViewController.m






Y ahora vamos a darle la funcionalidad para que al seleccionar un item de la tabla, vaya hasta el DetalleViewControler, lo hacemos mediante la función en la que hemos quitado antes código, pero no olvidar importar la nueva clase (DetalleViewController) en el ViewController.m.


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
DetalleViewController *Vista=[self.storyboard instantiateViewControllerWithIdentifier:@"IDDetalle"];
[self.navigationController pushViewController:Vista animated:YES];
}
@end


Podeis ejecutar la aplicación, y vais a ver que la funcionalidad del Navigation Controller sobre nuestra tabla personalizada ya está echa, pero vemos que los label y la imagen no cambian, y son los que se han puesto por defecto, así que vamos a darles funcionalidad para que cambien a los de nuestros items :


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//HACEMOS UN OBJETO DE LA VISTA DETALLE
DetalleViewController *Vista=[self.storyboard instantiateViewControllerWithIdentifier:@"IDDetalle"];
//HACEMOS OBJETO PERSONAJE DONDE ALMACENAMOS EL OBJETO DEL ARRAY
Personaje *elemento = [[Personaje alloc] init];
elemento=[items objectAtIndex:indexPath.row];
//RELLENAMOS LOS ITEMS
[Vista.Desc setText:elemento.Descripcion];
[Vista.img setImage:elemento.imagen];
[Vista.Nomb setText:elemento.Nombre];
//CARGAMOS LA VISTA
[self.navigationController pushViewController:Vista animated:YES];
}
@end


Ejecutamos la aplicación....
¿Pero que ocurre? No funciona!! ¡Los items de nuestro DetalleViewController no cambian! esto se debe a que falta una linea, vamos al coñazo que da Objetive C siempre con las versiones, hasta versiones de XCode anteriores a la 5.1 funcionaba así, pero a partir de estas versiones para adelante, hay que ponerla...


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//HACEMOS UN OBJETO DE LA VISTA DETALLE
DetalleViewController *Vista=[self.storyboard instantiateViewControllerWithIdentifier:@"IDDetalle"];
//ESTA ES LA PUÑETERA LINEA SIN LA CUAL NO FUNCIONA
[Vista loadView];
//HACEMOS OBJETO PERSONAJE DONDE ALMACENAMOS EL OBJETO DEL ARRAY
Personaje *elemento = [[Personaje alloc] init];
elemento=[items objectAtIndex:indexPath.row];
//RELLENAMOS LOS ITEMS
[Vista.Desc setText:elemento.Descripcion];
[Vista.img setImage:elemento.imagen];
[Vista.Nomb setText:elemento.Nombre];
//CARGAMOS LA VISTA
[self.navigationController pushViewController:Vista animated:YES];
}
@end


He querido tener en cuenta esta linea : [Vista loadView] porque me ha llevado más de un rato intentar solucionarlo, y la explicación la cuento a continuación :

Los elementos a los que se referencia mediante la instrucción DetalleViewController *Vista=[self.storyboard instantiateViewControllerWithIdentifier:@"IDDetalle"]; como pueden ser los label que hay dentro o la imagen, son nulos (nil) porque se ha instanciado el controlador, pero no se ha cargado la vista.
La vista del controlador se carga la primera vez que se ha solicitado su acceso, pero ninguna más, por eso no se cargan los datos. Con [Vista loadView] cargamos la vista y se nos va el problema.








Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

iOS : Ejercicio 6. UINavigationCotroller

Blog >Lista ejercicios >  Ejercicio 6


Hola desarrolladores! Hoy seguimos con el tutorial de ejercicios básicos, hoy vamos a trabajar por primera vez con UIViewController:




 Ejercicio 6: UINavigationController básico 

Creamos un nuevo proyecto de la forma habitual, file - new - proyect -single view application.
Borramos el view Controller por defecto e insertamos un Navigation Controller, y salen 2 vistas. Por el lado izquierdo sale el Navigation Controller que es el que va a manejar el rollo de moverse por las vistas, y a la derecha borramos la tableView,y arrastramos un View Controller en su lugar donde antes estaba el Table View.

Pulsamos sobre el navigation controller pulsando control y arrastramos hacia el de la derecha, entre las opciones que aparecen, pulsaremos la de Relationship - Root View Controller, así le decimos que el Navigation Controller es el de la izquierda.





Ahora a esta nueva ViewController le asignamos la clase View Controller en el Custom Class.Esta clase se nos crea por defecto en el proyecto cuando le creamos.Le ponemos para distinguirle un título, un botón y un label.





No nos perdamos, tenemos dos pantallas : un Navigation Controller a la izquierda y un View Controller a la derecha, pues ahora hay que añadir otro nuevo View Controller y le asignamos algun label o ImageView o lo que querais.





Creamos una nueva clase Objetive-C que llamamos MuestraViewController que herede de UIViewController y lo linkamos al nuevo View Controller que hemos colocado.

Es imprescindible también el Identifier, en este caso pondremos IDMuestra.(Cuarta pestañita del panel de propiedades de objetos, sección View Controller - Identifier,a partir de XCODE 5.0 estará en la tercera pestaña como Storyboard ID) 

Arrastramos una imagen al proyecto, y en este último controlador que hemos puesto, colocamos una imágen, arrastrando una ImageView al lienzo y en la cuarta pestañita del panel de propiedades de los objetos en la opcion image la elegimos quedando así :





Más o menos que está ya todo echo lo relacionado con la interfad, vamos a empezar la navegación. Vamos al storyboard y cambiamos la vista a la que señala "Assistant Editor" teniendo a un lado el storyboard y a otro el View Controller.h pusamos ctrl+click boton sobre el boton, lo arrastramos hasta el ViewController.h para que nos cree la acción, aparecerá un panel como el que se ve a continuación : 





 Ahora, tenemos que en nuestro archivo View Controller.m se nos ha creado esta función :

- (IBAction)cambiar:(idsender{
}
@end

Bien, lo que hay que hacer en ese método que se ejecutará cuando se pulse el botón, es crear un objeto MuestraViewController que referenciará al ViewController de la imagen, esto quedaría así :




- (IBAction)cambiar:(idsender{
 MuestraViewController *vista = [self.storyboard instantiateViewControllerWithIdentifier:@"IDVista"];
 [self.navigationController:vista animated:YES];
}
@end


Vualá, ahora ya tenemos una vista con un botón que nos llevará a nuestra MuestraViewController, y además en ella arriba tenemos un botón con el nombre de la View Controller anterior, que hace la función de "atras". Ya para finalizar, supongamos que queremos un botón que vaya hacia atrás en la View como el que anteriormente he mencionado, pues en storyboard de la imagen, arrastramos un botón, y hacemos la misma operación que en el botón del View Controller principal pero esta vez en el MuestraViewController.h:

Seguidamente en el MuestraViewController.m aparecerá esta función (dependiendo como habremos llamado a la acción (No olvidar que hay que seleccionar Action, no IBOutlet). A la mía la he llamado atrás.


- (IBAction)Atras:(idsender{
 //LE DECIMOS QUE VUELVA ATRAS
 [self.navigationController popViewControllerAnimated:YES];
 // SI NAVEGAMOS ENTRE MUCHAS PANTALLAS PODEMOS USAR LO SIGUIENTE QUE NOS DEVOLVERIA A NUESTRA PANTALLA ROOT
        // [self.navigationController popToRootViewControllerAnimated:YES];
}
@end







Compartir Compartir Compartir Compartir




Thebestandroide Indice Thebestandroide Ejercicio anterior Thebestandroide Siguiente ejercicio

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