2016-05-15 11 views
0

Ich möchte eine UIAlertView anzeigen, während meine Elemente von meinem Tabellenansicht-Controller abgerufen werden (aus dem EKEventStore). Sobald alle meine Artikel erschienen sind, möchte ich, dass die Warnung verschwindet.UIAlertView ablehnen, sobald alle Elemente in View Controller angezeigt werden

Ich habe versucht, die Warnung in ViewDidAppear() zu entlassen, aber das funktioniert nicht. Meine Warnung bleibt nur herum. Und ich kann es nicht einfach nach dem Code ablehnen, um meine Items abzurufen, weil das Abrufen auf einem eigenen Thread läuft und die Ausführung danach weiterführt - daher wird meine Warnung einfach erscheinen und sofort verschwinden.

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

Sind Sie sicher, dass die '-1' Index funktioniert? Haben Sie überprüft, ob die Lade- und Löschfunktionen in der Reihenfolge aufgerufen werden, die Sie erwarten würden? – Putz1103

+0

Der Index funktioniert. Dieser Code funktioniert in anderen Szenarios (d. H. Mit einem NSTimer, der die Kündigung nach fünf Sekunden aufruft.) Ich muss nur das Ereignis finden, das ich verwenden könnte, wenn alle meine Elemente im Tabellenansicht-Controller angezeigt werden. – Daniel

+0

Wie wäre es mit dem gleichen Ort, an dem Sie dem 'loadingIndicator' sagen, die Animation zu stoppen? – Putz1103

Antwort

1

Es sollte nicht viewDidAppear() sein. viewDidAppear lädt jedes Mal, wenn Ihre Ansicht angezeigt wird (daher wird dies sofort ausgeblendet).

Sie müssen stattdessen irgendwo in Ihrem Code entlassen, nachdem alles, was Sie passieren wollen, geladen wird. Möglicherweise hier: (aber das hängt davon ab, was genau der Abruf Ihrer Artikel sieht aus wie)

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