J'essaie d'obtenir l'activation d'actualisation sur iOS 7 dans ma vue Tableau. Dans mon viewDidLoad
, j'ai:
refreshControl = [[UIRefreshControl alloc] init];
[self.mytableView setContentOffset:CGPointMake(0, refreshControl.frame.size.height) animated:YES];
[refreshControl beginRefreshing];
[refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
Je cours ensuite:
-(void)refreshTable {
[self.mytableView reloadData];
[refreshControl endRefreshing];
}
Sur iOS 6, cela signifierait que lorsque vous tirez sur la vue de la table, elle affiche la flèche circulaire qui s’étire au fur et à mesure que vous tirez et qui, une fois tiré suffisamment loin, s’actualise. À l'heure actuelle, je ne vois aucune flèche circulaire. Qu'est-ce que je rate?
Vous n'avez pas besoin de définir explicitement frame ou de démarrer UIRefreshControl
. Si c'est un UITableView
ou UICollectionView
, il devrait fonctionner comme un charme en soi. Vous devez cependant l'arrêter.
Voici comment votre code devrait ressembler à ceci:
- (void)viewDidLoad {
[super viewDidLoad];
refreshControl = [[UIRefreshControl alloc]init];
[refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
if (@available(iOS 10.0, *)) {
self.mytableView.refreshControl = refreshControl;
} else {
[self.mytableView addSubview:refreshControl];
}
}
Dans votre fonction refreshTable
, vous devez l'arrêter lorsque vous avez terminé de rafraîchir vos données. Voici à quoi ça va ressembler:
- (void)refreshTable {
//TODO: refresh your data
[refreshControl endRefreshing];
[self.mytableView reloadData];
}
Veuillez noter que si vous actualisez vos données de manière asynchrone, vous devez déplacer les appels endRefreshing
et reloadData
vers votre gestionnaire d'achèvement.
Vous avez oublié de joindre le UIRefreshControl
à la vue de votre table.
Changez votre viewDidLoad
en
refreshControl = [[UIRefreshControl alloc]init];
[refreshControl addTarget:self action:@selector(refreshTable) forControlEvents:UIControlEventValueChanged];
[self setRefreshControl:refreshControl];
P.S. Votre contrôleur de vue doit être une sous-classe de UITableViewController
.