Cambiar una imagen en una UITableViewCell sin recargar la celda

Estoy escribiendo una aplicación para iPhone con UITableView como interfaz de usuario principal. Cada sección consta de dos filas, un encabezado y el cuerpo. Cuando el usuario hace clic en el encabezado, elimino la segunda fila cambiando el valor de numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    cbwComponent *comp = [_componentController objectInListAtIndex:section];
    if([comp hasContentsView] && !comp.contentsHidden){
        return 2;
    }else
        return 1;
}

Cuando el usuario selecciona el encabezado, estoy usando el siguiente código:

comp.contentsHidden = YES;
[self.tableView beginUpdates];
NSArray *deleteIndexPaths = [[NSArray alloc] initWithObjects:[NSIndexPath indexPathForRow:1 inSection:indexPath.section], nil];
[self.tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];

Funciona muy bien, con un agradable efecto de desvanecimiento suave. El problema es que estoy tratando de agregar un indicador en la celda del encabezado (fila 0) que cambia cuando se hace clic en él. Para cambiar esa imagen, tengo que actualizar la fila superior y la segunda fila, lo que hace que la transición se vea mal (bueno, no tan suave). ¿Hay alguna forma de cambiar la imagen en una UITableViewCell sin actualizar la celda?

Muchas Gracias

EDITAR: ¡Lo descubrí! Puede mantener la transición suave siempre que vuelva a cargar esa primera fila antes de realizar el cambio a la segunda fila. Tiene que llamarse dentro de [tableView beginUpdates];

[self.tableView beginUpdates]; 
[self.tableView reloadRowsAtIndexPaths:[[NSArray alloc] initWithObjects:[NSIndexPath indexPathForRow:0 inSection:indexPath.section], nil] withRowAnimation:UITableViewRowAnimationNone]; 
... 
[self.tableView endUpdates];

Hizo el truco.

preguntado el 22 de mayo de 12 a las 18:05

1 Respuestas

También puede subclasificar una celda de vista de tabla e implementar una transición de vista en ella que se puede llamar desde su controlador de vista. Luego podría llamar a eso sin tener que recargar la celda.

[(YourCustomCell*)[tableView  cellForRowAtIndexPath:indexPathOfYourCell] fadeInIndicator];

contestado el 22 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.