UITableView Indicateur d'Activité de la Pomme façon
Mon problème est assez commun. J'en veux pour preuve certains "chargement" des trucs pendant que les données qui seront affichées dans une table est en cours de téléchargement. Mais toutes les solutions que j'ai vu jusqu'ici est d'ajouter certains filateurs de cellules, ou mettre de la semi-transparent sur le dessus de l'application.
Ce que je veux actif, c'est la chose qu'apple le fait dans ses applications (par exemple YouTube). Comme, la roue qui tourne avec le mot "Chargement" s'affiche sur le fond blanc, puis les données sont affichées.
J'ai vu aussi une solution avec un groupe de style, mais ma table a un simple style de sorte qu'il n'est pas de m'aider à me beaucoup je pense.
MODIFIER
Mon code ressemble à ceci:
- (void)loadImagesData
{
UIView *tableView = self.view;
self.view = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, 320, 367)];
dispatch_queue_t downloadQueue = dispatch_queue_create("flickr downloader", NULL);
dispatch_async(downloadQueue, ^{
NSArray *images = [FlickrFetcher photosInPlace:self.place maxResults:MAX_PHOTOS];
dispatch_async(dispatch_get_main_queue(), ^{
self.view=tableView;
self.imagesData = images;
});
});
dispatch_release(downloadQueue);
}
et données images setter appels reloadData
sur la vue de la table.
UITableview *tableview...
) et ensuite de changer d'auto.vue d'un autre point de vue. Cela signifie que désormais votre tableview ivar points à votre nouvelle vue à la place de l'ancien. J'espère qu'il est clair...Je ne comprends pas :(. Je l'ai regardé comme: j'ai créé un pointeur vers un point de vue afin de ne pas être libéré par l'ARC, et puis j'ai mis un
self.view
revenir. Vous pouvez poster ce que devrait être la bonne façon, donc je vais le regarder et à comprendre?Ok essayez ceci: Supprimer la ligne:
UIView *tableView = self.view;
Ajouter les éléments suivants: UIView *theView = self.view; [theView addSubView:[[LoadingView alloc] initWithFrame:CGRectMake(0, 0, 320, 367)]];
à l'Intérieur de votre thread principal bloc: Remplacer: self.view=tableView;
avec: [[theView.subviews lastObject] removeFromSuperview];
ce que nous avons fait a été d'ajouter votre chargement au-dessus de la table et une fois que nous sommes prêts à nous retirer pour révéler la table. Si cela ne fonctionne pas, faites le moi savoir.Quelle est exactement la classe LoadingView dans votre code final? Je sais que c'est une vieille question, mais maintenant, en 2015, pouvez-vous me dire si c'est une bonne approche? Je veux faire de cette façon (sauf le tableView dans une variable, etc)
salut @sport. C'était vraiment il y a longtemps et depuis je n'ai pas programmé pour iOS. Mais ici, c'est un repo avec mon implémentation: github.com/Uko/UILoadingView, peut-être que ça vous aidera à comprendre ce que j'ai fait
OriginalL'auteur Uko | 2012-03-20
Vous devez vous connecter pour publier un commentaire.
UIViewController
(pas unUITableViewController
- même si vous êtes sur le point de présenter un tableau)Il suffit de ne pas oublier d'ajouter les protocoles et les méthodes utilisés pour contrôler votre tableview
J'espère que cela va vous aider à
Wow, cela fonctionne cool, juste une chose: j'ai utilisé
UITableViewController
et sur laviewDidLoad
je magasinself.view
dans une variable locale, puis définissezself.view
le chargement de la vue, et le déjeuner thread qui télécharge des données, quand elle se termine le chargement de données, j'ai misself.view
à cette variable locale et de recharger les données. Il y a un problème. De temps après le chargement des données de la chargement de vue clignote, indiquant mon tableview pour moins d'une seconde et puis reste sur l'écran. Où peut être le problème? Je pensais queself.view = oldView
devrait à 100% le point de vue que je suis affectation.Une chose à surveiller est que, puisque vous êtes le lancement d'un thread pour télécharger les données, une fois que vous avez terminé, vous devez basculer thread principal pour tous les changements dans l'INTERFACE utilisateur. Essayez également de définir la
self.view
à zéro avant de changer à nouveau de la vue. Laissez-moi savoir si cela fonctionne pour vous aussi 🙂J'ai ajouté mon code à la question. Quand j'ajoute
self.view=nil;
avantself.view=tableView;
j'obtiens un écran noir lors du chargement des donnéesOriginalL'auteur Alladinian
Une autre réponse à montrer un indicateur d'activité à l'intérieur d'un UITableViewController, sans en changer pour un UIViewController.
Dans le storyboard, ajouter un indicateur d'activité à l'intérieur de la vue de la table (mais pas au-dessus de la TableViewCell !). Il sera à l'intérieur de la vue de la table d'en-tête (pas d'en-tête de section !)
Connecter la sortie de l'indicateur d'activité de votre fichier de classe
Utiliser ces fonctions pour afficher ou masquer l'indicateur d'activité
Profitez-en !
OriginalL'auteur Nahouto