68

Me he encontrado con un error muy desconcertante. La primera fila de mi UITableView devuelve y la segunda devuelve en el indexPath! ¿Cómo es eso posible?didSelectRowAtIndexPath devuelve un error IndexPath

En mi `- (void) viewDidLoad` todo sigue estando bien. Estoy destacando la primera fila con éxito con

currentRow = 0; 
[tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:currentRow inSection:0] 
    animated:NO scrollPosition:UITableViewScrollPositionNone]; 

tengo la variable currentRow para el seguimiento de la fila seleccionada (otros cambios de control según la cual uno está seleccionado en ese momento).

Ahora, en mi función de delegado `didDeselectRowAtIndexPath` tengo:

-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
... 
NSLog(@"IndexPath: %@", [indexPath description]); 
} 

El registro muestra lo siguiente:

IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 0] cuando toco la segunda fila , y IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1] cuando me toque el primera fila.

No hay inserción de fila, eliminación o clasificación, etc., ni siquiera desplazarse. Es un estilo simple UITableView, agrupado, con 1 sección y 3 filas. ¿Qué podría estar causando esto?

Gracias por su ayuda,
S

Respuesta

224

Ha implementado didDeselectRowAtIndexPath. Se disparará cuando la fila sea ya no se seleccione.

Al tocar la segunda fila, la primera fila es ya no se selecciona, por lo que se mostrará [0, 1].
Cuando toque la primera fila de nuevo, la segunda fila ahora es ya no se selecciona, por lo que se mostrará [0, 0].

Estas son totalmente esperadas.

Implemente didSelectRowAtIndexPath si necesita que responda cuando la fila es seleccionada.

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    //          ^
    ... 

    NSLog(@"IndexPath: %@", [indexPath description]); 
} 
+14

Heh - Lo extrañé cuando leí la pregunta yo mismo. :-) Es como perder la palabra "the" cuando se usa dos veces. ;-) –

+3

Acabo de hacer esto también. Que frustrante. Intellisense es genial 99.9% del tiempo pero ese otro .1% ... wow. – swilliams

+4

Acabo de pasar varias horas tratando de descubrir que iOS me estaba llamando con la fila que seleccioné previamente. He intentado con todo. Es sorprendente la diferencia que hacen algunas letras. Misterio resuelto. –

3

A pesar del título, el método sobrecargado es, de hecho, didDeselectRowAtIndexPath, por lo que suena como el comportamiento es correcto - cuando se toca la fila 1 Tes, el 0 se convierte seleccionada, y viceversa.

+0

Pasé del mismo problema :) –

Cuestiones relacionadas