web-dev-qa-db-fra.com

didSelectRowAtIndexPath renvoie un IndexPath incorrect

J'ai rencontré un bug vraiment déroutant. La première ligne de mes retours UITableView 1 et le seconde on revient  dans l'indexPath! Comment est-ce possible?

Dans mon `- (void) viewDidLoad` tout va bien. Je souligne avec succès la première ligne avec

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

J'ai la variable currentRow pour suivre quelle ligne est sélectionnée (un autre contrôle change en fonction de celle qui est actuellement sélectionnée).

Maintenant, dans ma fonction de délégué `didDeselectRowAtIndexPath`, j'ai:

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

Le journal affiche les informations suivantes:

IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 0] quand je touche le seconde ligne et IndexPath: <NSIndexPath 0x79509d0> 2 indexes [0, 1] quand je touche le première rangée.

Il n'y a pas d'insertion, de suppression ou de tri de lignes, etc., pas même de défilement. Il s'agit d'un simple UITableView, style groupé, avec 1 section et 3 lignes. Qu'est-ce qui peut causer cela?

Merci de votre aide,
S

70
Mundi

Vous avez mis en œuvre avez-vousDeselectRowAtIndexPath . Il sera déclenché lorsque la ligne ( ne sera plus sélectionnée .

Lorsque vous touchez la deuxième ligne, la première ligne n'est plus sélectionnée , donc [0, 1] sera affiché.
Lorsque vous touchez à nouveau la première ligne, la deuxième ligne n'est plus sélectionnée , donc [0, 0] s'affichera.

Celles-ci sont totalement attendues.

Mettre en œuvre didSélectionnerRowAtIndexPath si vous en avez besoin pour répondre lorsque la ligne est sélectionnée .

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

    NSLog(@"IndexPath: %@", [indexPath description]);
}
229
kennytm

Malgré le titre, la méthode surchargée est en fait didDeselectRowAtIndexPath, donc il semble que le comportement soit correct - lorsque la 1ère ligne est touchée, la 0ème est désélectionnée, et vice versa.

3
please delete me