UITableView rebondir vers le haut de section lors de l'appel de reloadRowsAtIndexPaths

Quand un utilisateur appuie sur un bouton dans une de mes lignes, je mets à jour le modèle sous-jacent de cette ligne, puis d'appeler reloadRowsAtIndexPaths pour la ligne de donnée (c'est à dire en une seule rangée de rechargement).

- (IBAction)handleCompleteTouchEvent:(UIButton *)sender {
    NSIndexPath *indexPath = [self.tableView indexPathForView:sender];
    id item = [self dataForIndexPath:indexPath];

    if ([item respondsToSelector:@selector(completed)]) {
        //toogle completed value
        BOOL completed = ![[item valueForKey:@"completed"] boolValue];
        [item setValue:[NSNumber numberWithBool:completed] forKey:@"completed"];

        [self.tableView beginUpdates];
        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
        [self.tableView endUpdates];
    }
}

Le problème est que l'affichage de la table rebondit vers le haut de la section après avoir fait cet appel. Comment puis-je éviter cela et de garder la position de défilement où il est?

  • Le Code a l'air correct. Pouvez-vous partager plus de code qui peuvent être pertinents pour le problème? Est-il un endroit dans le code si votre vue contrôleur d'où vous appelez [self.tableView reloadData];?
  • J'ai ajouté plus de code pour montrer l'ensemble de la méthode. Une fois reloadRowsAtIndexPaths est appelée la table se déplace automatiquement vers le haut de la section, mais seulement lorsque la section d'en-tête est hors de l'écran. Il n'y a rien de spécial à propos de la création des cellules ou de la section d'en-tête (juste une chaîne de caractères).
  • Je ne suis pas à l'exécution de toute reloadData ou quelque chose comme ça. Aussi, il n'y a rien dans la documentation à propos de rebondir vers le haut d'une section sur un reloadRows. Je n'ai jamais remarqué cette fonctionnalité avant, mais là encore je n'avez généralement pas de données évolution des actions au sein de la cellule elle-même, donc c'est un nouveau type d'interaction pour moi.
  • Essayez de vérifier la valeur de indexPath reçu de indexPathForView. Il peut être nil. Si donc il doit être à l'origine de défilement vers le haut.
  • le indexPath est correct. C'était la première chose que j'ai vérifié. En outre, il ne rebondit pas vers le haut de la table (0,0). Il rebondit vers le haut de la section (1,0).
  • C'est sûrement un bug et pas encore fixé !

InformationsquelleAutor xsee | 2014-07-15