2009-03-03 4 views
1

L'un des onglets de mon UITabBarController prend du temps avant de pouvoir être affiché.ajouter "Now Loading" avant l'option UITabBarController?

Quelle est la meilleure façon d'afficher un "chargement en cours" avant que le viewcontroler ne termine son travail?

J'ai essayé de configurer une vue "chargement maintenant" dans la méthode viewDidLoad de viewController de l'onglet, puis je fais le travail dans viewDidAppear, en définissant un drapeau pour ne pas refaire le travail par viewDidAppear.

Cependant, je ne vois jamais la vue «en cours de chargement» ... certaines optimisations doivent être effectuées - viewDidAppear de viewcontroller est appelé avant le TabBarControllerDelegate didSelectViewController.

Existe-t-il un mécanisme UITabBarController qui permettrait l'affichage d'un espace réservé avant l'affichage du viewcontroller?

Des idées?

Matt

Répondre

1

La technique à utiliser ici est la suivante:

  1. mis en place un « Chargement vue » dans votre viewWillAppear: ou viewDidLoad: du contrôleur méthode
  2. puis, frayer un nouveau thread pour faire le chargement réel (( )
  3. Lorsque vous avez terminé, envoyez un message au contrôleur (en utilisant le modèle de délégué , par exemple) le « chargement » est fait
  4. enfin, supprimer la vue de chargement et permet à l'utilisateur de procéder

En procédant ainsi, laisse votre interface d'application encore utilisable, même si le contrôleur de vue particulier est occupé.

Il n'y a pas de méthode intégrée pour cela, vous devrez tout coder vous-même.

2

de Remerciez Je peux me tromper, mais peut-être votre problème est que, en faisant le travail de temps en viewDidAppear, vous bloquez le fil de l'événement principal de sorte que la vue ne met pas à jour jusqu'à ce que le travail soit terminé. C'est à dire. vous configurez le "chargement en cours" dans viewWillAppear, mais vous ne le voyez jamais car, au moment où viewDidAppear est terminé, c'est fait avec le travail lourd.

2

PerformSelector de NSObject: withObject: afterDelay: la méthode peut être utile ici. Affichez votre alerte "Please wait" ou regardez, ou quoi que ce soit, puis utilisez performSelector: withObject: afterDelay: pour démarrer le travail. Votre chargement sera retardé jusqu'à la prochaine exécution de la boucle d'événement, après quoi l'interface utilisateur aura été redessinée.

Questions connexes