2011-01-03 11 views
4

Ich möchte einen Spinner verwenden. Aber, dieser Code unten zeigt keine Spinner und ich bin mir nicht sicher warum. Wie funktioniert das? BTW, es ist aufgerufen von einem Senden-Button, den ich erstellt habe.Es kann kein Spinner angezeigt werden

//spinner declared in .h file 
UIActivityIndicatorView *aSpinner; 

//throw up spinner from submit btn we created 
aSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: 
    UIActivityIndicatorViewStyleWhiteLarge]; 

[self.view addSubview:aSpinner]; 
[aSpinner release]; 
[aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous]; 

//get rid of spinner when finished delegate is fired 
- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    NSLog(@"REQUEST FINISHED"); 
    [aSpinner stopAnimating]; 
    //[aSpinner release]; 
} 

Antwort

14

Wenn Sie unmittelbar nach der Anzeige des Drehfelds einen Blockierungscode aufrufen, wird die Benutzeroberfläche nicht aktualisiert, da sie nur aktualisiert wird, wenn die Hauptlaufschleife ausgeführt wird. Wenn dies wirklich die Ursache des Problems ist, sollte der Spinner angezeigt werden, wenn Sie die [request startSynchronous] Zeile für einen Test auskommentieren.

Die Lösung wäre, eine asynchrone Anfrage zu verwenden. Der delegierende Code sieht so aus, als ob Sie das bereits tun, aber der Start-Call erwähnt die synchrone Operation. Möchten Sie das erklären? (Oder habe ich etwas übersehen?)

3
//spinner declared in .h file 
UIActivityIndicatorView *aSpinner; 

eine Eigenschaft in der Header-Datei als-auch hinzufügen:

@property (nonatomic, retain) UIActivityIndicatorView *aSpinner; 

Vergessen Sie nicht, in .m-Datei zu synthetisieren!

//throw up spinner from submit btn we created 
UIActivityIndicatorView *tempSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
self.aSpinner = tempSpinner; 
[tempSpinner release]; 

[self.view addSubview:self.aSpinner]; 
[self.aSpinner startAnimating]; 

//send blocking request 
[request startSynchronous]; 


//get rid of spinner when finished delegate is fire 
- (void)requestFinished:(ASIHTTPRequest *)request { 
     NSLog(@"REQUEST FINISHED"); 
     [self.aSpinner stopAnimating]; 
} 

In Ihrem dealloc Methode, die Sie schreiben: [aSpinner release]; Dies ist jedoch nur einer von vielen Ansätzen.

+0

Der Spinner sollte durch den 'addSubview' Aufruf beibehalten werden, so dass dies nicht die Quelle des Problems für mich aussieht. – zoul

+0

Das stimmt, ich werde die Antwort bearbeiten. – LuckyLuke

0

Das Problem könnte in der Ansicht sein, dass Sie den Spinner hinzufügen. Ist es in der Lage, und hat es die Dimensionen, um den Aktivitätsindikator anzuzeigen? (z. B. UIBarButtonItems kann nicht mit addSubview umgehen)

Verwandte Themen