2009-07-10 5 views
0

Ich habe eine UITabBar + UINavigationController-Anwendung, die oft Daten aus dem Internet benötigt. Manchmal dauert es eine ganze Weile, bis es ankommt, daher möchte ich einen Aktivitätsindikator anzeigen.Aktivitätsanzeige in einer UITabBar-Anwendung auf dem iPhone

Was ich versuche, ist einen activityView zu meinem Fenster in meiner applicationDidFinishLaunching Methode hinzufügen:

[window addSubview:tabBarController.view]; 
fullscreenLoadingView.hidden = YES; 
[window addSubview:fullscreenLoadingView]; 

Und dann füge ich die Anwendung delegiert als Beobachter an das Standardbenachrichtigungszentrum:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startFullscreenLoading:) name:@"startFullscreenLoading" object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopFullscreenLoading:) name:@"stopFullscreenLoading" object:nil]; 

und implementieren die Methoden:

- (void)startFullscreenLoading:(NSNotification *)notification { 
    fullscreenLoadingView.hidden = NO; 
} 

- (void)stopFullscreenLoading:(NSNotification *)notification { 
    fullscreenLoadingView.hidden = YES; 
} 

Wenn ich diese dann verwenden direkt im applicationDidFinishLaunching Methode zeigt die Ladeanzeige Ansicht upp wie erwartet:

[[NSNotificationCenter defaultCenter] postNotificationName:@"startFullscreenLoading" object:self]; 

Aber wenn ich es von einem der Navigations-Controller verwenden die startFullscreenLoading: Methode aufgerufen wird, aber ich habe nicht die Ladeanzeige Ansicht sehen. Warum das?

Antwort

3

Laden Sie Ihre Daten in einen Hintergrund-Thread? Ihr Haupt-Thread wird blockiert & wird nicht in der Lage sein, andere Ereignisse neu zu zeichnen oder zu verarbeiten.

+0

Ok ich verstehe, nein, ich war es in den Haupt-Thread geladen, dachte ich, dass der Haupt-Thread zunächst die Benachrichtigung senden würde und tun die Methode und danach würde es die Daten laden. Aber ok, ich sehe, ich versuche es in einen anderen Thread zu laden. – Jeena

+0

Danke, das war mein Problem und es ist jetzt behoben :-) – Jeena

0

Die wahrscheinlichste Sache, die ich erraten kann, ist, dass Ihre Anzeigeansicht unter einer anderen Ansicht ist. Versuchen

[[fullScreenLoadingView superView] bringSubviewToFront:fullScreenLoadingView]

Wenn das nicht funktioniert, würde ich vorschlagen, innerhalb von -startFullscreenLoading brechen um sicherzustellen, dass die fullscreenLoadingView noch gültig ist.

+0

Ich habe versucht beide, NSLog (@ "% @", fullScreenLoadingView); sagt, es ist ein > und [Unteransichten der Fenster] enthält beide Ansichten. – Jeena

0

In meiner App tat ich dies, indem ich die UIActivityView in IB hinzufügte und sicherstellte, dass es über allem anderen stand (als Top-Level-Objekt). Es ist so eingestellt, dass es beim Stoppen unsichtbar ist.

Dann in meinem Code ich mache es mit [activityIndicator startAnimating] erscheinen und lassen Sie es verschwinden mit [activityIndicator stopAnimating];