0

Ich habe zur Zeit eine App, die beim Öffnen der App auf eine bestimmte URL verweist. Offensichtlich kann es eine Verzögerung zwischen dem Öffnen und dem Laden des WebView geben. Ich möchte also einen Aktivitätsindikator anzeigen, wenn das WebView geladen wird der folgende Code in meinem ViewController.swift:Wie kann UIActivityIndicator verschwinden, sobald er erscheint?

class ViewController: UIViewController, UIWebViewDelegate { 


@IBOutlet weak var webView: UIWebView! 

@IBOutlet weak var activityIndicator: UIActivityIndicatorView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    webView.delegate = self 

    let url = URL(string: "url to site") 
    webView.loadRequest(URLRequest(url: url!) 
} 

func webViewDidStartLoad(webView: UIWebView){ 
    activityIndicator.startAnimating() 
} 

func webViewDidFinishLoad(webView: UIWebView){ 
    activityIndicator.stopAnimating() 
} 

die Aktivitätsanzeige zeigt von Anfang an, aber es verschwindet nicht einmal die webView Lasten und bleibt sie für immer.

Antwort

0

Die Frage ein Syntax Problem ist, müssen Sie einen Unterstrich in den Funktionen hinzuzufügen.

0

Die Art, wie Sie Ihren Code organisieren, ist ein wenig verwirrend. Es scheint, dass Sie Ihre func s innerhalb die @IBAction Funktion deklarieren. Wenn dies der Fall ist, wird dies nicht funktionieren.

Versuchen Sie stattdessen

class ViewController: UIViewController, UIWebviewDelegate { 
    override func viewDidLoad() { 
     ... 
     webView.delegate = self 

     // You should add this to your Storyboard, above the webview instead of here in the code 
     activityIndicator.center = self.view.center 
     activityIndicator.hidesWhenStopped = true 
     activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray 
     // I forget the actual method name - look it up 
     view.insertSubview(activityIndicator, above: webView) 
    } 

    @IBAction func openButton(_ sender: Any) { 
     let url = URL(string: "websiteURL") 
     webView.loadRequest(URLRequest(url: url!)) 
    } 

    func webViewDidStartLoad(webView: UIWebView){ 
     activityIndicator.startAnimating() 
    } 

    func webViewDidFinishLoad(webView: UIWebView){ 
     activityIndicator.stopAnimating() 
    } 

    // You'll also want to add the "didFail" method 
} 
+0

Dank für die Empfehlung, habe ich gerade meine Frage aktualisiert, um besser zu zeigen, was ich suche, wenn Sie einen Blick werfen möchten, danke! – athill16

+0

@ athill16 Ich würde sicherstellen, dass "hidesWhenStopped" ist "wahr", wie Sie es vermuten, und implementieren Sie die 'didFail' Delegate-Methode. Wenn Sie einen Haltepunkt in 'webViewDidFinishLoad' platzieren, hört es dann tatsächlich auf? –

+0

Ich habe Haltepunkte hinzugefügt und sie haben nicht ausgelöst, aber das Problem war eigentlich eine Syntax, die das meiste davon reparierte, also werde ich in der Post aktualisieren. Meine einzige Frage ist, was macht die DidFail-Methode eigentlich? Ist dies der Fall, wenn die Telefonverbindung der Person so schlecht ist, dass das WebView nicht geladen werden konnte? – athill16

Verwandte Themen