2009-03-03 16 views
1

Eine der Registerkarten meines UITabBarControllers benötigt etwas Zeit, bis er angezeigt werden kann.hinzufügen "Now Loading" vor der Registerkarte UITabBarController auswählen?

Was ist der beste Weg, um ein "Now Loading" anzuzeigen, bevor der ViewControler seine Arbeit beendet?

Ich habe versucht, eine "jetzt laden" -Ansicht in der ViewDidLoad -Methode des ViewControllers der Registerkarte, dann mache ich die Arbeit in ViewDidAppear, ein Flag setzen, um die Arbeit beim nächsten Mal nicht wieder durch viewDidAppear zu tun.

Allerdings sehe ich nie die "jetzt wird geladen" -Ansicht ... einige Optimierung muss getan werden - der viewcontroller viewDidAppear wird vor dem TabBarControllerDelegate didSelectViewController aufgerufen.

Gibt es einen UITabBarController-Mechanismus, mit dem eine Platzhalteransicht angezeigt werden kann, bevor der Viewcontroller angezeigt wird?

Irgendwelche Ideen?

Thank du- Matt

Antwort

1

Die Technik hier zu verwenden ist:

  1. Aufmachungen eine „Lade Ansicht“ in Ihrem des Controllers viewWillAppear: oder viewDidLoad: Methode
  2. dann, einen neuen Thread laichen die tatsächliche Belastung zu tun (oder was auch immer verbrauchen Prozess Sie tun)
  3. wenn Sie fertig sind, senden Sie eine Nachricht an die Controller (mit dem Delegierten Muster, zum Beispiel), dass der „Laden“ wird
  4. endlich fertig, die Lade Ansicht entfernen und lassen den Benutzer

tut es auf diese Weise läßt Ihre Anwendungsschnittstelle noch brauchbar, auch wenn die jeweiligen View-Controller besetzt gehen.

Es gibt keine eingebauten Methoden, um dies zu tun, müssen Sie alles selbst codieren.

2

Ich könnte falsch sein, aber vielleicht Ihr Problem ist, dass die zeitaufwändige Arbeit in viewDidAppear, indem Sie, sind Sie den Hauptereignis-Thread blockiert, so dass die Ansicht nicht aktualisiert bis die Arbeit abgeschlossen ist. I.e. Sie richten das "Jetzt laden" in viewWillAppear ein, aber Sie sehen es nie, da bis zum Ende von viewDidAppear die schwere Arbeit erledigt ist. diese

2

NSObject performSelector: withObject: afterDelay: Methode kann hier nützlich sein. Zeigen Sie Ihre "Bitte warten" -Warnung oder Ansicht oder was auch immer an und verwenden Sie dann performSelector: withObject: afterDelay: um die eigentliche Arbeit zu starten. Ihr Laden wird bis nach der nächsten Ausführung der Ereignisschleife verzögert, und zu diesem Zeitpunkt wird die Benutzeroberfläche neu gezeichnet.

Verwandte Themen