2016-05-15 3 views
0

Je souhaite afficher un UIAlertView pendant que mes éléments sont récupérés (à partir de l'EKEventStore) par mon contrôleur de vue de table. Une fois que tous mes articles sont apparus, j'aimerais que l'alerte disparaisse.Quitter UIAlertView une fois que tous les éléments apparaissent dans View Controller

J'ai essayé de rejeter l'alerte dans viewDidAppear() mais cela ne fonctionne pas. Mon alerte reste juste autour. Et je ne peux pas simplement le rejeter après le code pour récupérer mes objets parce que la récupération s'exécute sur son propre thread et continue d'exécuter des choses après elle - par conséquent, mon alerte apparaîtra juste et disparaîtra immédiatement.

let alert = UIAlertView(title: "Loading", message: "Please wait...", delegate: nil, cancelButtonTitle: "Cancel") 

override func viewDidLoad() { 
    super.viewDidLoad() 

    dispatch_async(dispatch_get_main_queue()) { 
     let loadingIndicator: UIActivityIndicatorView = UIActivityIndicatorView(frame: CGRectMake(50, 10, 37, 37)) as UIActivityIndicatorView 
     loadingIndicator.center = self.view.center; 
     loadingIndicator.hidesWhenStopped = true 
     loadingIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
     loadingIndicator.startAnimating(); 

     self.alert.setValue(loadingIndicator, forKey: "accessoryView") 
     loadingIndicator.startAnimating() 
     self.alert.show() 
    } 

    // Code to fetch my items here... 
} 

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated)  
    self.alert.dismissWithClickedButtonIndex(-1, animated: true) 
} 
+0

Etes-vous sûr que l'index '-1' fonctionne? Avez-vous débogué pour trouver si les fonctions de chargement et de rejet sont appelées dans l'ordre que vous attendez? – Putz1103

+0

L'index fonctionne. Ce code fonctionne dans d'autres scénarios (c'est-à-dire, avec un NSTimer appelant le rejet après cinq secondes.) J'ai juste besoin de trouver l'événement que je pourrais utiliser pour quand tous mes éléments apparaissent dans le contrôleur de vue de table. – Daniel

+0

Que diriez-vous du même endroit où vous dites au 'loadingIndicator' d'arrêter d'animer? – Putz1103

Répondre

1

Il ne devrait pas être dans viewDidAppear(). viewDidAppear se charge à chaque fois que votre vue apparaît (c'est pourquoi elle l'ignore tout de suite).

Vous devez à la place ignorer cela quelque part dans votre code après que tout ce que vous voulez arriver est fait charger. Peut-être ici: (mais cela dépend de ce que ressemble exactement la récupération de vos objets)

// Code to fetch my items here... 
self.alert.dismissWithClickedButtonIndex(-1, animated: true) 
}