2011-01-28 8 views
8

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?

Respuesta

13

que me llevó a pedir la forma de saberlo a mí mismo:

Mi problema estaba usando el método UITableViewCellsetSelected: lugar de utilizar el método UITableViewdeselectRowAtIndexPath:.

+0

gracias! Tuve el mismo problema. – Marky

+0

¿aún puede reproducir la animación donde la selecciona por un breve momento y luego deseleccionarla justo después? – chourobin

+0

@ 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]; } –

Cuestiones relacionadas