2011-01-10 4 views
0

Ich habe ein kleines Problem mit einem meiner UIAlertViews. Ich versuche es zu zeigen, einige Aufgaben auszuführen und dann automatisch zu schließen. Dies ist der Code, den ich zur Zeit bin mit:UIAlertView nicht angezeigt

callingTaxi = [[UIAlertView alloc] initWithTitle:@"" message:@"検索中" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil]; 
[callingTaxi show]; 
/* Do some tasks */ 
[callingTaxi dismissWithClickedButtonIndex:0 animated:YES]; 
[callingTaxi release]; 

jedoch nur die UIAlertView zeigt auf halbem Weg. Ich kann sehen, dass der Hintergrund dunkler wird, aber nach Abschluss der Aufgaben wird die Warnmeldungsansicht schnell angezeigt und verschwindet dann wieder.

Irgendwelche Ideen, wie man dieses Problem löst?

Ben

+0

können Sie auf Ihre Lösung näher eingehen, da ich das gleiche Problem habe, danke! – Rasman

Antwort

3

Es zeigt, aber Sie es sofort entlassen, sondern für den Benutzer warten, etwas zu tun, mit

[callingTaxi dismissWithClickedButtonIndex:0 animated:YES]; 

Es gibt keine Zeit für iOS es vollständig zu machen. Wie auch immer, dies ist nicht wie verwendet werden soll. Was versuchst du hier zu erreichen?

Bearbeiten: Ich denke, Sie müssen einen Delegaten dem UIAlertView zuweisen, und lassen Sie den Delegaten behandeln, was in der AlertView passiert.

+0

Danke. Löste mein Problem :) – Ben

+0

können Sie mehr erklären, was Sie mit "der Delegat behandeln, was innerhalb der AlertView passiert" – Rasman

+0

@Rasman: Werfen Sie einen Blick auf http://mobile.tutsplus.com/tutorials/iphone/uialertview/ was erklärt wie Sie ein UIAlertViewDelegate erstellen können, um Schaltflächenklicks von einer UIAlertView zu behandeln – fresskoma

1

Sie sollten nicht in der gleichen Funktion schließen, die es zeigt, schließen Sie es durch den Timer oder als Reaktion auf ein anderes Ereignis.

0

Sie eine Methode für die Alertview Sie könnten erstellen sollten

- (void) alertView: (UIAlertView *) alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ 
// Do stuff 
// Or if you have multiple buttons, you could use a switch 

[callingTaxi release]; 

oder Autorelease ..

Aber x3ro hat die richtige Antwort gegeben, rufen Sie die Methode selbst, anstatt zu warten für den Benutzer drücken der Knopf ..

1

Sie brauchen keinen Delegierten. Das Problem besteht darin, dass die von Ihnen ausgeführten Aufgaben in einem Hintergrundthread ausgeführt werden müssen, sodass der Hauptthread zum Aktualisieren des Bildschirms allein gelassen wird.

Wenn Sie Ihren Code aktualisieren Blöcke und Versand Warteschlangen zu verwenden, wird alles funktionieren:

callingTaxi = [[UIAlertView alloc] initWithTitle:@"" message:@"検索中" delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil]; 
[callingTaxi show]; 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{ 
    /* Do some tasks */ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     // this code is back on the main thread, where it's safe to mess with the GUI 
     [callingTaxi dismissWithClickedButtonIndex:0 animated:YES]; 
     [callingTaxi release]; 
    }); 
}); 
0

die UIAlertView durch Feldes verwiesen: [callingTaxi dismissWithClickedButtonIndex: 0 animiert: YES]; bevor der Benutzer es lesen kann.

Wie lange beabsichtigen Sie, den Endbenutzer es lesen zu lassen ???