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
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]);
}
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.