Añadir elementos a mano en UITableView

Share


(Los fuentes del ejemplo están disponibles en el pie del artículo).

Tras la trilogía de SQLite con UITableView, donde veíamos como mantener nuestro TableView apoyado en una base de datos de SQLite, hemos pensado en mostrar otro ejemplo pero esta vez algo más sencillo, para ver el funcionamiento sencillo de dicho control añadiendo elementos de forma manual a nuestro TableView.

La forma de ver nuestro ejemplo en funcionamiento parte de la creación de un nuevo proyecto de tipo Navigation-Based Application, el cual nos creará un proyecto con un control de tipo UITableView por defecto y un control de tipo barra de navegación Navigation Bar.

RootViewController.xib y MainWindow.xib son los dos ficheros de recursos creados por el asistente para nuestro proyecto. El primero contiene el control tipo UITableView para nuestro ejemplo y el segundo fichero de recursos contiene, además de la ventana principal de nuestra aplicación, el anterior control de tipo UITableView insertado bajo nuestra barra de navegación Navigation Bar.

Aunque esta operación de incluir un fichero de recursos dentro de otro la ha realizado el asistente de forma automática, la forma manual de hacerlo es simplemente añadiendo bajo nuestro controlador de navegación Navigation Controller un controlador de tipo View Controller. Una vez insertado tendremos que cambiar desde nuestra ventana de atributos la opción de NIB Name para saber de que recurso tira y la opción de Class, para indicarle que clase será la encargada de gestionar dicho controlador. De momento dejemos el proyecto como lo creó el asistente y continuemos.

Es conveniente que nuestro control TableView este gestionado por su propia clase, en este caso RootViewController, para aislar el comportamiento de dicho control y como no, encapsular de forma correcta el código. Además, nuestro control deberá heredar de la clase UITableViewController, la cual ya nos proporciona gran parte de la funcionalidad del mismo y la opción de capturar mensajes relacionados, y la forma correcta de hacerlo, es gestionándolo con su propia clase.

- AÑADIMOS BOTONES DE AÑADIR Y ELIMINAR A NUESTRA BARRA DE NAVEGACIÓN -

Lo siguiente que haremos será añadir un par de botones para insertar y eliminar elementos a nuestro TableView. Si nos fijamos mediante Interface Builder en nuestro control Navigation Item, veremos que ya se encuentran definidos los estados backBarButtonItem, leftBarButtonItem y rightBarButtonItem, los cuales nos permiten añadir botones en las tres posiciones de nuestra barra de navegación.

En este momento os vuelvo a recordar como en un anterior artículo, el uso de la documentación de xCode, pues la misma me ha permitido encontrar que tipo de botón quiero insertar. He localizado buscando UIBarButtonItem, que puedo añadir un botón personalizado utilizando la función initWithTitle.

Los he creado tanto a izquierda como a derecha de nuestra barra de navegación, y para ambos botones, he definido a que función llamarán cuando sean pulsados, addItem y delItem.

 

C++:
  1. UIBarButtonItem *addItem = [[UIBarButtonItem alloc] initWithTitle:@"Añadir" style:UIBarButtonItemStylePlain target:self action:@selector(addItem:)];
  2. self.navigationItem.leftBarButtonItem = addItem;
  3. [addItem release];
  4.  
  5. UIBarButtonItem *delItem = [[UIBarButtonItem alloc] initWithTitle:@"Eliminar" style:UIBarButtonItemStylePlain target:self action:@selector(delItem:)];
  6. self.navigationItem.rightBarButtonItem = delItem;
  7. [delItem release];

Una vez creadas ambas funciones, ya solo nos queda implementarlas para que añadan o eliminen elementos. La forma de añadir y eliminar elementos siempre debemos hacerla en base a alguna estructura en memoria. Es decir, en nuestro ejemplo, al insertar y eliminar elementos, realmente lo hacemos sobre un array en memoria, y gracias a métodos de UITableView como numberOfRowsInSection (devuelve el número de elementos de nuestro TableView) y de cellForRowAtIndexPath (devuelve una celda de una determinada posición), tendremos nuestro TableView actualizado con los elementos que tenemos en nuestro array.

Así, al añadir, insertamos un elemento en el array y forzamos a actualizar nuestro TableView mediante reloadData. Dicha llamada, forzará a que nuestro TableView nos devuelva el número de filas que va a mostrar (numberOfRowsInSection), y si devuelve más de 0, automaticamente también forzará a que se pinten las celdas (cellForRowAtIndexPath). Para eliminar, haremos exactamente igual, eliminaremos un elemento de nuestro array y llamaremos de nuevo a reloadData.

C++:
  1. - (void)addItem:(id)sender {
  2.  NSUInteger count = [self.elementos count];
  3.  [self.elementos insertObject:@"elemento" atIndex:count];
  4.  [self.tableView reloadData];
  5. }
  6. - (void)delItem:(id)sender {
  7.  NSIndexPath* selected = (NSIndexPath*)[self.tableView indexPathForSelectedRow];
  8.  [self.elementos removeObjectAtIndex:selected.row];
  9.  [self.tableView reloadData];
  10.  
  11. }

En definitiva y para resumir, nosotros nos encargaremos de mantener un array u otra estructura en memoria, y cuando hagamos una llamada a reloadData de nuestro TableView, este nos hará dos preguntas en forma de métodos:

1. numberOfRowsInSection: ¿Cuantas filas quieres que pinte?

2. cellForRowAtIndexPath: ¿Que fila pinto en esta posición?

Espero que os haya servido de ayuda. Se aceptan comentarios.

 

Descargar: uitableview.zip

banner ad

7 Responses to “Añadir elementos a mano en UITableView”

  1. pequenionoa says:

    La única duda que me surge es, ¿cómo asocio el array que quiero y no otro a la tableview?.

  2. Antonio says:

    Realmente no asocias el array. Te lo creas como un objeto de tu clase, trabajas con él, y lo utilizas en los dos métodos de TableView que he comentado. Es una estructura independiente, no asociada. Bájate el ejemplo que he subido.

    Saludos

  3. David says:

    una duda amigo, como hago para crear una tabla pero que no abarque toda la pantalla, sino la mitad de ella, y sea scrollable y todo como normalmente es, pero tener la otra mitad de la vista libre para colocar otros componentes… esto es posible? ya que no lo he logrado hacer… gracias

  4. Antonio says:

    Seguro que hay manera de hacerlo. Dejame mirarlo, pero te aconsejo que publiques estas dudas en el foro ya que más gente te contestará.
    Saludos.

  5. pequenionoa says:

    Divide la pantalla con dos vistas y cargas la tabla en una de ellas. Como en el ejemplo del nivel piolin.
    Saludos.

  6. David says:

    Gracias! ya lo consegui gracias a sus ejemplos…

  7. pequenionoa says:

    De nada, para eso esta este Blog.
    Saludos.

Leave a Reply

  • Buy Cheapest diazepam Now 24/Internet)(safe Pharmacy. Best Online.
  • Buy Cheapest tramadol cod delivery Now Top Online Pharmacy. Best Drugstore.
  • Buy Cheap diuretics without prescription Now Best Internet. The Largest Internet Pharmacy.
  • Buy Cheapest valium online prescription Now Best Drugstore. Cheap Pharmacy Online.
  • ultram 50mg Online Without Prescription Best Prices. Pharmacy Store.
  • viagra suppliers Online Without Prescription Best Online. Pharmacy Store.
  • Buy Cheapest viagra on line pharmacy Now Cheap Pharmacy Online. Best Internet.
  • Buy Cheap valium without a precription Now Cheap Prescription Drugs. Guaranteed Shipping.
  • Buy Cheapest cialis overnight Now Special Prices For cialis overnight! Best Internet.
  • Buy Cheap cialis woman Now Online Medical Shop. Cheap Prescription Drugs.
  • Buy Cheap buy alprazolam now Now Cheap Online Pharmacy. Cheap Pharmacy Online.
  • Buy Cheap atorvastatin buy Online Best Drugstore. Online Prices For atorvastatin buy!
  • Buy Cheap sildenafil oral jelly Now Internet Prices For sildenafil oral jelly! Best Internet.
  • Buy Cheap nexium purchase Online No Prescription Needed. Best Drugstore.
  • Buy Cheapest viagra patch Online Cheap Prescription Drugs. Best Online.
  • Buy Cheap drug store pharmacy online Now Best Drugstore. Online Prices For drug store pharmacy online!
  • Buy Cheap what is the generic for viagra Online Internet Prices For what is the generic for viagra! Best Prices.
  • Buy Cheap where can i buy arthritis drugs Now Free Viagra Pills! No Prescription Needed.
  • Buy Cheapest weight loss medicine online prescrition Now Low Prices. Discount Pharmacy Online.
  • Buy Cheapest buy finasteride online Now Cheap Online Pharmacy. WorldWide Shipping.
  • Buy Cheapest infertility treatment drugs Online Cheap Online Pharmacy. Best Internet.
  • Buy Cheap levitra description Online Guaranteed Shipping. Top Online Pharmacy.
  • tadalafil soft tabs Online Without Prescription Pharmacy Store. Best Drugstore.
  • Buy Cheapest weight loss no prescription Now Best Prices. Drugs, Health And Beauty.
  • Buying Cheap cialis safety. Offshore Rx, Best Prices. Guaranteed Shipping.
  • Buy Cheapest zetia cost Now 100% Satisfaction Guaranteed. Best Online.
  • Buy Cheap order cialis online Now The Largest Internet Pharmacy. Low Prices.
  • Buy Cheap pain products Now Discount Pharmacy Online. Guaranteed Shipping.
  • Buy Cheapest levitra information Now Best Online. Internet Prices For levitra information!
  • Buy Cheapest generic cialis overnight delivery Now Free Viagra Pills! 24/Online Pharmacy.
  • Buy Cheapest side effects from viagra Online Low Prices. Internet Prices For side effects from viagra!
  • Buy Cheap chlamydia antibiotics Online WorldWide Shipping. Guaranteed Shipping.
  • Buy Cheapest online pharmacy in canada Online WorldWide Shipping. Free Viagra Pills!
  • Buy Cheap tramadol worldwide Online No Prescription Needed. Best Internet.
  • Buy Cheap levitra online order Online Discount Online Pharmacy. Pharmacy Store.
  • Buy Cheap buy generic levitra cheap Online Guaranteed Shipping. Cheap Online Pharmacy.
  • Buy Cheap muscle relaxants otc Now WorldWide Shipping. Discount Pharmacy Online.
  • Buy Cheapest pharmacy diflucan Now Cheap Pharmacy Online. Pharmacy Store.
  • Buy no prescription ultram Online Without Prescription. Best Drugstore. Low Prices.
  • Buy Cheapest promethazine side effects Online Best Internet. Drugs, Health And Beauty.
  • Buy Cheap drug store coupon Online The Largest Internet Pharmacy. Low Prices.
  • Buy Cheap vitamin shoppes Now Free Viagra Pills! Online Prices For vitamin shoppes!
  • Buy Cheap pain meds online without a prescription Now Low Prices. 24/Internet)(safe Pharmacy.
  • Buy Cheap foot pain products Online Top Online Pharmacy. 24/Online Pharmacy.
  • Buy Cheap 30 mg phentermine Now Pharmacy Store. The Largest Internet Pharmacy.
  • Buy Cheap products for back pain Now Free Viagra Pills! Cheap Pharmacy Online.
  • Buy Cheap antianxiety meds Now Free Viagra Pills! Online Medical Shop.
  • Buy Cheapest obesity self help Now Top Online Pharmacy. 24/Online Pharmacy.
  • Buy Cheap genric viagra Online WorldWide Shipping. Guaranteed Shipping.
  • Buy Cheapest soft tabs viagra Now Top Online Pharmacy. Online Medical Shop.
  • india drug sales on line Online Without Prescription Online Medical Shop. Low Prices.
  • Buy Cheap buy anti anxiety Online No Prescription Needed. Best Internet.
  • Buy Cheapest cialis generic overnight state united Online Buy Medications Online. Best Online.
  • Buy Cheap cialis gel Now Online Prices For cialis gel! Online Medical Shop.
  • Buy Cheap buy levitra us Online Best Online. Discount Online Pharmacy.
  • Buy Cheap mexico pharmacies Online Online Prices For mexico pharmacies! Best Drugstore.
  • Buy Cheap prescription weight loss drugs Now Order Cheap Meds Without Rx. Best Internet.
  • buy sildenafil citrate Online Without Prescription Best Prices. Best Internet.
  • Buy Cheap extreme weight loss Now WorldWide Shipping. 24/Online Pharmacy.
  • Buy Cheapest mexico levitra Online Best Internet. 24/Online Pharmacy.
  • Buy Cheap order inderal Now Best Drugstore. Discount Online Pharmacy.
  • Buy Cheapest ativan no prescription Now Special Prices For ativan no prescription! Best Internet.
  • Buy Cheapest buspar anxiety Now Top Online Pharmacy Supplier. Best Online.
  • rimonabant acomplia Online Without Prescription Best Prices. Best Online.
  • Buy Cheapest rx drugs without prescription Now Guaranteed Shipping. Cheap Online Pharmacy.
  • Buy Cheap energy diet pill Now Cheap Online Pharmacy. No Prescription Needed.
  • Buy Cheapest buy pain meds online without rx Now Free Viagra Pills! Buy Medications Online.
  • Buy Cheap lasix furosemide Online Low Prices. Drugs, Health And Beauty.
  • Buy Cheapest zovirax Online Guaranteed Shipping. Best Drugstore.
  • Buy Cheap mexican discount drugs Online Pharmacy At The Best Price! Best Drugstore.
  • Buy Cheap clomid ovulation day Now Buy Medications Online. Pharmacy Store.
  • Buy Cheap tablet zolpidem Now Low Prices. All Medications Are Certificated!
  • Buy Cheapest prescription clonazepam Now Low Prices. Pharmacy At The Best Price!
  • Buy Cheap viagra side affects Online Best Drugstore. Cheap Online Pharmacy.
  • Buy Cheap order tofranil Online Best Drugstore. Online Prices For order tofranil!
  • Buy Cheap tips for weight loss Now Discount Online Pharmacy. Pharmacy Store.
  • Buy Cheap ativan information Now Discount Online Pharmacy. WorldWide Shipping.
  • Buy Cheap pharmacies Online WorldWide Shipping. Guaranteed Shipping.
  • Buy Cheapest pain medication online pharmacy Now Low Prices. Online Prices For pain medication online pharmacy!
  • Buy Cheap india pharmacies Now Discount Online Pharmacy. Pharmacy Store.
  • Buy Cheapest cheap 10mg cialis without a prescription Now Cheap Pharmacy Online. Top Online Pharmacy.
  • Buy Cheap cost of viagra Online Cheap Online Pharmacy. Top Online Pharmacy.
  • Buy Cheapest cheapest phentermine online Now Best Online. Cheap Prescription Drugs.
  • Buy Cheap valium and driving Now Guaranteed Shipping. Cheap Pharmacy Online.
  • Buy Cheapest levitra dosing Online Best Drugstore. WorldWide Shipping.
  • Buy Cheap xanax withdrawals Now Cheap Prescription Drugs. Best Internet.
  • Buy Cheap buy prescription diet pills Now Free Viagra Pills! No Prescription Needed.
  • Buy Cheapest free trail of cialis Online Low Prices. Buy Medications Online.
  • Buy Cheap cialis free trials Now The Largest Internet Pharmacy. Best Prices.
  • Buy Cheap cialis buy Now The Largest Internet Pharmacy. Low Prices.
  • online prescription pharmacy Online Without Prescription Best Drugstore. Best Prices.
  • Buy Cheap cheap cialis pillstore Online Online Prices For cheap cialis pillstore! Low Prices.
  • Buy Cheapest impotent tadalafil softtabs Online No Prescription Needed. Best Drugstore.
  • Buy Cheap discount drugstore Online Best Online. Discount Pharmacy Online.
  • Buy Cheap generic cialis absolute lowest price Now 24/Online Pharmacy. Top Online Pharmacy.
  • Buy Cheap alprazolam overdose Online WorldWide Shipping. No Prescription Needed.
  • Buy Cheapest pills zoloft Now We Can Offer You Visit Our Online Pharmacy.
  • Buy order phentermine uk Without Prescription Doctor. Low Prices. Best Online.
  • Buy Cheap phentermine cod delivery Online Drugs, Health And Beauty. Best Prices.
  • Buy Cheap worlds strongest fat burner Now Buy Medications Online. Top Online Pharmacy.