2015-05-04 14 views
5

Ich versuche Aktivitätsanzeige mit swift zu machen, aber es ist etwas, das ichAktivitätsanzeige in Swift

Hier bin fehlt, ist der Code für Start-Aktivität Taste Taste:

Indicator = ActivityIndicator().StartActivityIndicator(ViewController()); 

Und hier ist der Code für Aktivitäten- Taste

ActivityIndicator().StopActivityIndicator(ViewController(),indicator: Indicator); 

und Code für Aktivitätsindikator Klasse ist

class ActivityIndicator: NSObject { 

    var myActivityIndicator:UIActivityIndicatorView! 

    func StartActivityIndicator(obj:UIViewController) -> UIActivityIndicatorView 
    { 

     self.myActivityIndicator = UIActivityIndicatorView(frame:CGRectMake(100, 100, 100, 100)) as UIActivityIndicatorView; 

     self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray 
     self.myActivityIndicator.center = obj.view.center; 

     obj.view.addSubview(myActivityIndicator); 

     self.myActivityIndicator.startAnimating(); 
     return self.myActivityIndicator; 
    } 

    func StopActivityIndicator(obj:UIViewController,indicator:UIActivityIndicatorView)-> Void 
    { 
      indicator.removeFromSuperview(); 
    } 


} 

Dank Problem Gelöst

während Code schreibe ich weiß, dass die Zeit, die ich selbst in der Funktion übergeben müssen, aber zu diesem Zeitpunkt weiß ich nicht Welche Selbst so II verweist kann nicht empfangen, bis ich den Typ kenne, dann entscheide ich mich zu versuchen, erhalten anderen Typ (UIView, UIActivityIndicatorView, UIViewController) dann fand ich, dass es UIViewController sein sollte, aber ich vergaß, dass es Pass mit Selbst sein sollte und ich suche für was in Funktionsaufruf übergeben und ich dachte ich ets versuchen UIViewController und es gab mir keinen Fehler, so dachte ich, es ist richtig aber wenn es nicht funktioniert, dachte ich, ich bin nah genug, so dass es besser ist, Experte über das Problem zu fragen. Und wie ich es erwartet Problem ist innerhalb von wenigen Minuten gelöst

Swift 3-Version

class ActivityIndicator: NSObject { 

    var myActivityIndicator:UIActivityIndicatorView! 

    func StartActivityIndicator(obj:UIViewController) -> UIActivityIndicatorView 
    { 

     self.myActivityIndicator = UIActivityIndicatorView(frame:CGRect(x: 100, y: 100, width: 100, height: 100)) as UIActivityIndicatorView 

     self.myActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
     self.myActivityIndicator.center = obj.view.center; 

     obj.view.addSubview(myActivityIndicator); 

     self.myActivityIndicator.startAnimating(); 
     return self.myActivityIndicator; 
    } 

    func StopActivityIndicator(obj:UIViewController,indicator:UIActivityIndicatorView)-> Void 
    { 
     indicator.removeFromSuperview(); 
    } 


} 
+0

Wenn Sie 'StopActivityIndicator()' aufrufen (das übrigens mit einem Lowe-Case s beginnen soll), rufen Sie es auf einer neuen Instanz statt der Instanz auf, die von der Startfunktion – Paulw11

+0

zurückgegeben wurde Ich nenne es richtig, aber wenn das der Fall ist, dann sollte es Probleme geben, den Indikator nicht richtig zu starten? –

+0

Die Groß-/Kleinschreibung ist nur Konvention - Klassen beginnen mit einem Großbuchstaben, Funktionen und Variablen beginnen mit einem Kleinbuchstaben. Das Problem besteht darin, dass Sie eine neue Instanz stoppen, anstatt die Instanz, die Sie gestartet haben. Sie müssen das Objekt aus dem Start-Call speichern und Call-Stop für diese Instanz – Paulw11

Antwort

5

Es scheint, dass jedes Mal, wenn Sie Start rufen/Stopp, Sie eine neue Instanz von ViewController erstellen Ersetzen Sie einfach ViewController zu self und

Zum Beispiel versuchen

Indicator = ActivityIndicator().StartActivityIndicator(self); 
+0

funktioniert perfekt !!! Ich bin nur verwirrt mit Selbst das ist, warum dieses Problem –

+0

Wenn es funktioniert, akzeptieren Sie bitte meine Antwort. – Leo

+2

@VarunNaharia Mit 'ViewController()' erstellen Sie eine neue Instanz der 'ViewController'-Klasse und diese Instanz wird nur angezeigt, wenn Sie sie explizit darstellen. Die Verwendung von "self" bezieht sich auf die Instanz des Controllers, der die Methode aufruft, und da * angezeigt wird, wird Ihr Indikator angezeigt. – Jeffrey

Verwandte Themen