2010-02-08 19 views
0

J'ai des opérations destructrices qui nécessitent une confirmation, et j'utilise UIActionSheet.Ouverture d'un UIActivityIndicatorView après une UIActionSheet

À l'intérieur du clickedButtonAtIndex, je tire quelques opérations de longueur qui nécessitent un UIActivityIndicatorView. Le problème est que je ne peux pas voir le UIActivityIndicatorView jusqu'à ce que la feuille UIActionSheet se soit fermée, et cela se produit lorsque l'opération est terminée. Puis-je forcer la fermeture de la feuille UIActionSheet même si l'utilisateur a appuyé sur certains boutons et que son délégué clickedButtonAtIndex a été déclenché?

Dans le code pseudo:

  • utilisateur veut faire une opération destructrice
  • Demander la confirmation d'un UIActionSheet
  • L'utilisateur dit OUI
  • incendies délégué clickedButtonAtIndex et appelle une opération lenghtly
  • Cette opération, la première chose à faire est d'ouvrir une UIActivityIndicatorView mais comme la UIActionSheet est active, je ne peux pas voir jusqu'à la fin ...

grâce,

r.

Répondre

1

Vous pouvez appeler

CFRunLoopRunInMode(UITrackingRunLoopMode, 0.1, true); 

de laisser les éléments de l'interface utilisateur rafraîchir avant votre long calcul commence. Vous pouvez également utiliser

-(void)doLengthyOperation { 
    show_activity_indicator_view(); 
    [self performSelector:@selector(doRealLengthyOperation) withObject:nil afterDelay:0.1]; 
} 
-(void)doRealLengthyOperation { 
    // do the real lengthy operations. 
} 
+0

Ce ne fonctionne pas: CFRunLoopRunInMode (UITrackingRunLoopMode, 0,1, true); Je vais essayer l'autre approche ... merci, r. – mongeta

+0

@mongeta: Vous devez probablement utiliser le mode 'kCFRunLoopModeDefault' au lieu de' UITrackingRunLoopMode'. L'autre route est meilleure cependant. – kennytm

+0

Merci, enfin une bonne combinaison des deux solutions résolu mon problème. :-) – mongeta