UIRefreshControl sur viewDidLoad
J'utilise le code suivant pour créer un UIRefreshControl:
- (void) viewDidLoad
{
[super viewDidLoad];
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(doLoad) forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
}
- (void) doLoad
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
//Instead of sleeping, I do a webrequest here.
[NSThread sleepForTimeInterval: 5];
dispatch_async(dispatch_get_main_queue(), ^{
[tableView reloadData];
[self.refreshControl endRefreshing];
});
});
}
Il fonctionne très bien. Si je navigue à mon avis, faites glisser la table, le code s'exécute et affiche les données.
Cependant, ce que je voudrais faire est d'avoir le point de vue dans le "chargement" de l'état dès qu'il apparaît (de cette façon, l'utilisateur sait quelque chose se passe). J'ai essayé d'ajouter le suivant:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.refreshControl beginRefreshing];
}
Mais il ne semble pas fonctionner. Lorsque je navigue à vue, il ressemble à un affichage normal (actualisation de contrôle n'est pas visible), en plus quand j'ai essayer de tirer de l'actualisation de contrôle, il n'a jamais fini de se charger.
Évidemment, je suis aller sur ce de la mauvaise façon. Toutes les suggestions sur comment je dois gérer cela?
- Il fonctionne pour moi. Je fais exactement la même chose. Seulement que l'action pour la refreshControl a une propriété expéditeur. Quand je rentre de l'écran de l'actualisation de contrôle n'est pas visible, mais si je tire la vue de la table un peu en baisse, je peux voir la filature de rafraîchissement de contrôle.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
N'oubliez pas d'appeler endRefreshing à un certain point!
MODIFIER pour ajouter plein d'échantillon de travail:
Cet exemple-vue-contrôleur, construit et géré en iOS6.1 comme racine viewcontroller commence avec la
UIRefreshControl
déjà visible et l'animation lorsque l'application est lancée.TSTableViewController.h
TSTableViewController.m
Modifiant manuellement l'
contentOffset
est d'insécurité et de mal et peut entraîner un comportement inattendu dans certains cas. Cette solution fonctionne sans toucher à lacontentOffset
à tous:contentOffset
, alors que vous ne l'êtes pas. Le problème, c'est que vous avez reset le contenu de décalage lors de l'actualisation - et tu ne peux pas savoir ce que la valeur correcte est pour le réinitialiser si d'autres composants deUIKit
peut également modifier le décalage dans le même temps.tableView.scrollRectToVisible(CGRectMake(0, -1, 1, 1), animated: false)
fonctionne bien. aussi, si au cours de cette première animation, je tire à nouveau, la refreshcontrol hauteur des gouttes de 20 points, sans raison apparente, lorsqu'il atteint 119 et continue comme si rien ne s'était passé.Une autre option est de tirer un
UIControlEventValueChanged
dans votre viewDidAppear: pour déclencher une actualisation initiale.Vous ne définissez jamais de soi.refreshControl