uitableviewEmpezando con uitableview


Observaciones

Esta sección proporciona una visión general de qué es uitableview y por qué un desarrollador puede querer usarla.

También debe mencionar cualquier tema grande dentro de uitableview y vincular a los temas relacionados. Dado que la Documentación para uitableview es nueva, es posible que deba crear versiones iniciales de los temas relacionados.

Métodos de fuente de datos y delegado:

Cada vista de tabla debe tener un delegado y una fuente de datos.

Métodos de Delegado

Ninguno de los métodos de delegado son realmente necesarios, sin embargo, deberá implementar tableView: didSelectRowAtIndexPath: para manejar toques en una celda de la tabla:

Y otros métodos son ...

// Display customization

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;

// Variable height support

// If these methods are implemented, the above -tableView:heightForXXX calls will be deferred until views are ready to be displayed, so more expensive logic can be placed there.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;

// Section header & footer information. Views are preferred over title should you decide to provide both

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;   // custom view for header. will be adjusted to default or specified header height
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;   // custom view for footer. will be adjusted to default or specified footer height

// Accessories (disclosures). 

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;

// Selection

// Called before the user changes the selection. Return a new indexPath, or nil, to change the proposed selection.
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath;
// Called after the user changes the selection.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;


// Editing

// Allows customization of the editingStyle for a particular cell located at 'indexPath'. If not implemented, all editable cells will have UITableViewCellEditingStyleDelete set for them when the table has editing property set to YES.
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath;

// Controls whether the background is indented while editing.  If not implemented, the default is YES.  This is unrelated to the indentation level below.  This method only applies to grouped style table views.
- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath;

             

// Indentation

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath; // return 'depth' of row for hierarchies
 

Fuente de datos métodos requeridos:

Se requieren los siguientes métodos del origen de datos: tableView: numberOfRowsInSection: y tableView: cellForRowAtIndexPath :. Si su tabla es una tabla agrupada, también debe implementar numberOfSectionsInTableView :.

Métodos requeridos : -

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

// Row display.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
 

Métodos opcionales : -

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;              // Default is 1 if not implemented

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;    // fixed font style. use custom view (UILabel) if you want something different
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

// Editing

// Individual rows can opt out of having the -editing property set for them. If not implemented, all rows are assumed to be editable.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;

// Moving/reordering

// Allows the reorder accessory view to optionally be shown for a particular row. By default, the reorder control will be shown only if the datasource implements -tableView:moveRowAtIndexPath:toIndexPath:
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath;

// Index

- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView;                                                    // return list of section titles to display in section index view (e.g. "ABCD...Z#")
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;  // tell table which section corresponds to section title/index (e.g. "B",1))

// Data manipulation - insert and delete support

// After a row has the minus or plus button invoked (based on the UITableViewCellEditingStyle for the cell), the dataSource must commit the change
// Not called for edit actions using UITableViewRowAction - the action's handler will be invoked instead
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

// Data manipulation - reorder / moving support

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath;
 

Anatomía de una célula de mesa

El UITableViewCell predeterminado tiene varias vistas de datos y subvistas estándar.

  • cell.textLabel - la UILabel para la celda
  • cell.detailTextLabel : una UILabel más pequeña que aparece debajo de la etiqueta de texto
  • cell.imageView - un UIImageView que el lado izquierdo de la celda

La vista de accesorios opcional puede contener uno de los siguientes iconos. El tipo de accesorio predeterminado es UITableViewCellAccessoryNone .

UITableView en detalle

¿Qué es UITableView?

UITableView es un objeto de interfaz de usuario utilizado con mayor frecuencia que presenta datos en una lista desplazable de varias filas en una sola columna que también se puede dividir en secciones. Solo permite el desplazamiento vertical y es una subclase de UIScrollView .

¿Por qué usamos UITableView?

Podemos utilizar UITableView para presentar una lista de opciones que se pueden seleccionar, para navegar a través de datos estructurados jerárquicamente , presentar una lista indexada de elementos , para mostrar información detallada y controles en grupos visualmente distintos que utilizan secciones .

Podemos ver el uso de UITableView en nuestros contactos, listas de correo, etc. No solo se utiliza para presentar datos textuales, sino que también se pueden incluir imágenes junto con textos, como en la aplicación de YouTube.

Instrucciones detalladas sobre cómo configurar o instalar UITableView usando el Tablero de Historias.

  1. Crear un proyecto simple para la aplicación de vista única.
  2. En la Biblioteca de objetos, seleccione el objeto "Vista de tabla" y arrástrelo a la vista de su controlador de vista. Simplemente ejecutando el proyecto verá una página en blanco con líneas.
  3. Ahora, si simplemente desea una vista desplazable con contenido, arrastre una UIView a la vista de UITableView , ajuste su tamaño y arrastre el resto de las UIElements a esa vista según los requisitos. Pero si desea presentar una lista de formato similar, usamos UITableViewCell .
  4. La clase UITableViewCell define los atributos y el comportamiento de las celdas que aparecen en los objetos UITableView. Esta clase incluye propiedades y métodos para configurar y administrar el contenido y el fondo de las celdas (incluido texto, imágenes y vistas personalizadas), administrar la selección de celdas y el estado de resalte, administrar vistas de accesorios e iniciar la edición de los contenidos de las celdas.
  5. La mejor parte del uso de UITableViewCell es la reutilización. El propósito de dequeueReusableCellWithIdentifier es usar menos memoria. Por ejemplo, si tiene una lista de 1000 entradas y solo son visibles 10 entradas a la vez, solo las celdas visibles se asignan en la memoria, el resto se reutiliza como cuando el usuario desplaza la lista. Todo lo que necesita hacer es arrastrar un UITableViewCell y soltarlo en tableView. Luego haga clic en la celda-> Ir al inspector de atributos-> Establezca el estilo de tableView en custom e identificador a cualquier elemento único que le gustaría decir myCell.
  6. Ahora necesitamos adaptarnos a la fuente de datos para que el objeto dé datos a otro objeto. Por ejemplo, el protocolo UITableViewDataSource tiene métodos como cellForRowAtIndexPath y numberOfRowsInSection dictan lo que se debe mostrar en la tabla. Mientras que el objeto de tipo delegado responde a las acciones que toma otro objeto. Por ejemplo, el protocolo UITableViewDelegate tiene métodos como didSelectRowAtIndexPath para realizar acciones sobre un usuario que selecciona una fila en particular en una tabla. 7. Cuando se ajusta a la fuente de datos, necesita implementar el método requerido, es decir,
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
        // Here you need to give the total number of items you want to list. For example if you want list of 2 numbers, then:

           return 2; 

 }
 

y

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

//Here you need to dequeue the reusable cell which we discussed in point 5. Then you can modify your cell here according to you and customize it here as per your requirement. Here the call comes for numberOfRows number of times. 

static NSString *cellIdentifier = @"cellID";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:
cellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc]initWithStyle:
    UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
} 
if(indexPath.row){
    [cell.textLabel setText:"1"];
}else{
    [cell.textLabel setText:"2"];
}

return cell;
}
 
  1. También sobre NSIndexPath: - La clase NSIndexPath representa la ruta a un nodo específico en un árbol de colecciones de matrices anidadas. Esta ruta se conoce como una ruta de índice. Sus objetos son siempre de longitud 2. Se utilizan, por ejemplo, para indexar una celda de vista de tabla. El primer índice en un objeto NSIndexPath se llama la sección, el segundo es la fila. Un objeto de ruta de índice con la sección 0 y la fila 0 indica la primera fila en la primera sección. Use [NSIndexPath indexPathForRow:inSection:] para crear rápidamente una ruta de índice.