2011-04-18 18 views
5

Hola chicos, me aparece un error realmente extraño y no puedo encontrar la manera de solucionarlo: cuando me desplazo por mi UITableView a veces resalto una celda azul, incluso cuando no me pongo completamente seleccionadoUITableViewCell se vuelve azul cuando se desplaza

Por ejemplo:
-Cell 1-
-Cell 2-
-Cell 3-
-Cell 4-
Si pongo mi dedo en la célula 2 y vaya a la celda 4 se dejará Celda 2 resaltada, aunque didSelectRowAtIndexPath: nunca se activa.

¿Alguna idea?

editar el código Agregado:

UITableViewCell *cell = nil; 

    static NSString *cellId = @"StyleDefault"; 
    cell = [tableView dequeueReusableCellWithIdentifier:cellId]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] 
       initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease]; 
    } 

    cell.textLabel.text = @"Cell One"; 
    cell.textLabel.textAlignment = UITextAlignmentCenter; 
    [cell setAccessoryView:nil]; 

    return cell; 
+0

¿podría mostrarnos el código de creación de celda en cellForRowAtIndexPath? –

+0

díganos qué hace exactamente en el delegado 'CellForRowAtIndexPath'? –

Respuesta

0

Usted puede utilizar después mientras que la creación de células.

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

cell = Your allocation. 

cell.selectionStyle = UITableViewCellSelectionStyleNone; 

supongo que necesitará también tenga a ver la propiedad UIViewTable para Touch es decir Delay Toques Toques de contenido y contenido cancelables.

Espero que esto ayude.

+0

Esto elimina la selección cuando estoy desplazándose, pero desafortunadamente hace que si el usuario realmente selecciona la fila no se vuelva azul. – Rob

0

Override -tableView: willSelectRowAtIndexPath: en su delegado UITableView, y devuelva nada para todo para asegurarse de que no le permite seleccionar las filas.

+0

Supongo que quiere que la celda sea seleccionable. Su punto es cuando desplazas la vista. –

+0

Esto no me permite seleccionar la fila en absoluto – Rob

1

¡CORREGIDO!

Mi solución fue dos partes:

1) En cellForRowAtIndexPath: poner "cell.selected = NO;", que soluciona el problema de si la célula se posó en continuación, se apaga la pantalla (scroll).

UITableViewCell *cell = nil; 

static NSString *cellId = @"StyleDefault"; 
cell = [tableView dequeueReusableCellWithIdentifier:cellId]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] 
      initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease]; 
} 

cell.textLabel.text = @"Cell One"; 
cell.textLabel.textAlignment = UITextAlignmentCenter; 
[cell setAccessoryView:nil]; 

//Here: 
cell.selected = NO; 

return cell; 

2) Poner "[tableView deselectRowAtIndexPath: indexPath animada: YES];" en didSelectRowAtIndexPath: en lugar de lo que solía tener "[[tableView cellForRowAtIndexPath: indexPath] setSelected: NO];" lo cual estaba mal en muchos niveles.

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

Espero que eso ayude a los demás que tienen este problema. Caso cerrado.

Cuestiones relacionadas