211 votes

Comment savoir quand UITableView a terminé le ReloadData ?

J'essaie de faire défiler le bas d'un UITableView après qu'il ait terminé de l'exécuter. [self.tableView reloadData]

A l'origine, j'avais

 [self.tableView reloadData]
 NSIndexPath* indexPath = [NSIndexPath indexPathForRow: ([self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1) inSection: ([self.tableView numberOfSections]-1)];

[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

Mais ensuite, j'ai lu que le reloadData est asynchrone, donc le défilement ne se produit pas puisque le self.tableView , [self.tableView numberOfSections] y [self.tableView numberOfRowsinSection sont toutes égales à 0.

Merci !

Ce qui est bizarre c'est que j'utilise :

[self.tableView reloadData];
NSLog(@"Number of Sections %d", [self.tableView numberOfSections]);
NSLog(@"Number of Rows %d", [self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1);

Dans la console, il retourne Sections = 1, Row = -1 ;

Quand je fais exactement les mêmes NSLogs en cellForRowAtIndexPath J'obtiens Sections = 1 et Row = 8 ; (8 est juste)

-2voto

Vit Points 207

Vous pouvez l'utiliser pour faire quelque chose après avoir rechargé les données :

[UIView animateWithDuration:0 animations:^{
    [self.contentTableView reloadData];
} completion:^(BOOL finished) {
    _isUnderwritingUpdate = NO;
}];

-20voto

Jake Points 1

Essayez de fixer des délais :

[_tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0.2];
[_activityIndicator performSelector:@selector(stopAnimating) withObject:nil afterDelay:0.2];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X