Me he encontrado con un problema al implementar un UITableView
en una aplicación de iOS en la que estoy trabajando (iOS SDK 4.2). Si toco una celda en la Vista de tabla, y luego deslizo la vista para que la celda salga de la pantalla, cuando vuelve a estar visible, se ha vuelto a seleccionar la celda seleccionada más recientemente.UITableViewCell se vuelve a seleccionar cuando se desplazó de nuevo en la pantalla
Para probar esto he creado un nuevo proyecto Ver aplicación basada, arrastré a cabo una UITableView
en Interface Builder, y establezca el controlador de vista como fuente de datos de la vista de tabla y delegado, y poner el código siguiente en el controlador de vista:
- (NSInteger)numberOfSectionsInTableView:(UITableView *) tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *) tableView numberOfRowsInSection:(NSInteger) section {
return 12;
}
- (UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {
static NSString *cellID = @"aCellID";
UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (!aCell) {
aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease];
}
aCell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row +1];
return aCell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *aCell = [tableView cellForRowAtIndexPath:indexPath];
[aCell setSelected:NO animated:YES];
}
Al ejecutar esto (en el simulador o en el dispositivo) si tuviera que tocar cualquier celda (por ejemplo, la celda 12), se seleccionaría y anularía la selección. Después de esto, sin celdas en la tabla actualmente seleccionada, si desplazo la vista para que la celda seleccionada más recientemente (12 en este caso) abandone la pantalla, se seleccionará nuevamente cuando vuelva a aparecer.
¿Es este el comportamiento predeterminado previsto para UITableView
? ¿O posiblemente un error en mi implementación? ¿Cuál sería la mejor manera de anular la selección de esta celda en esta situación?
gracias! Tuve el mismo problema. – Marky
¿aún puede reproducir la animación donde la selecciona por un breve momento y luego deseleccionarla justo después? – chourobin
@ CR54 Sí, todavía se puede conseguir que el efecto de animación de la siguiente manera: - (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath { [tableView deselectRowAtIndexPath: indexPath animada: YES]; } –