2008-11-21 9 views
16

Je voudrais complètement réinitialiser la position de défilement d'un UITableView, de sorte que chaque fois que je l'ouvre, il affiche les éléments les plus élevés. En d'autres termes, je voudrais faire défiler la vue de la table vers le haut chaque fois qu'il est ouvert.Comment réinitialiser la position de défilement d'un UITableView?

J'ai essayé d'utiliser la pièce de code suivante, mais il semble que j'ai mal compris la documentation:

- (void)viewWillAppear:(BOOL)animated { 
    [tableView scrollToNearestSelectedRowAtScrollPosition:UITableViewScrollPositionTop animated:NO]; 
} 

Est-ce une mauvaise approche ici?

Répondre

33

Août a obtenu la méthode spécifique UITableView. Une autre façon de le faire est:

[tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 

Cette méthode est définie dans UIScrollView, la classe parente à UITableView. L'exemple ci-dessus indique de faire défiler la case 1x1 à 0,0 - le coin supérieur gauche, en d'autres termes.

+1

Ceci est en fait une façon très pratique de le faire parce que vous n'avez pas besoin de vous soucier de savoir si votre table est vide ou non. J'ai eu un crash méchant allant à NSIndexPath (0,0) quand il n'y avait pas d'enregistrements à afficher. –

+0

Merci! Bon conseil! – quantum

6

La méthode que vous utilisez fait défiler (comme le nom de la méthode l'indique) la ligne sélectionnée la plus proche. Dans de nombreux cas, ce ne sera pas la première rangée. Au lieu de cela, vous voulez utiliser soit

scrollToRowAtIndexPath:atScrollPosition:animated: 

ou

selectRowAtIndexPath:animated:scrollPosition: 

où vous utilisez le chemin d'index de la ligne que vous voulez faire défiler jusqu'à. La deuxième méthode sélectionne réellement une ligne, la première méthode défile simplement vers elle.

+0

Cela ne fonctionnait pas pour iOS 4.0 lors du démarrage d'une séquence d'animation. Je devais utiliser scrollRectToVisible: animé: – chrish

Questions connexes