web-dev-qa-db-fra.com

UIRefreshControl - Tirez pour actualiser dans iOS 7

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?

43
Nivesh666

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.

168
Yas T.

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.

8
Ayush Goel