2017-02-08 4 views
0

Ich versuche MBProgressHUD auf UIWebView zu zeigen. Ich versuche einen iframe in webview zu laden. Mein Spinner zeigt an, wenn Webview geladen wird, aber nicht versteckt, obwohl es in webView didFinishLoad() zum Haltepunkt geht.MBProgressHUD nicht versteckt - Swift 3

Hier ist mein Code:

class LiveViewController: UIViewController, UIWebViewDelegate { 

@IBOutlet weak var liveWebView: UIWebView! 

var spinnerActivity: MBProgressHUD! = nil 

override func viewDidLoad() { 
    super.viewDidLoad() 

    liveWebView.delegate = self 

    let embededHTML = "<html><body><iframe src=\"\" width=\"100%\" height=\"500\" frameborder=\"0\" scrolling=\"no\"></iframe></body></html>" //link removed 
    liveWebView.loadHTMLString(embededHTML, baseURL: nil) 
} 

public func webViewDidStartLoad(_ webView: UIWebView){ 
    spinnerActivity = MBProgressHUD.showAdded(to: self.view, animated: true) 
    spinnerActivity.label.text = "Loading" 
    spinnerActivity.detailsLabel.text = "Please Wait!" 
    spinnerActivity.isUserInteractionEnabled = false 
} 

public func webViewDidFinishLoad(_ webView: UIWebView){ 
    spinnerActivity.hide(animated: true) 
} 

public func webView(_ webView: UIWebView, didFailLoadWithError error: Error){ 
    spinnerActivity.hide(animated: true) 
} 
} 

Ich bemerkte, dass webViewDidStartLoad und webViewDidFinishLoad zweimal aufgerufen wird. Bitte helfen Sie mir. Der Spinner versteckt sich einfach nicht .. Ich habe verwendet Xcode8 und Swift 3.

Edit:

Ich habe versucht, dies aber nicht funktionieren:

class LiveViewController: UIViewController, UIWebViewDelegate { 

@IBOutlet weak var liveWebView: UIWebView! 

var spinnerActivity: MBProgressHUD! = nil 

override func viewDidLoad() { 
    super.viewDidLoad() 

    liveWebView.delegate = self 

    let embededHTML = "<html><body><iframe src=\"\" width=\"100%\" height=\"500\" frameborder=\"0\" scrolling=\"no\"></iframe></body></html>" //link removed 
    liveWebView.loadHTMLString(embededHTML, baseURL: nil) 
} 

    public func webViewDidStartLoad(_ webView: UIWebView){ 
     MBProgressHUD.showAdded(to: self.view, animated: true) 

    } 

    public func webViewDidFinishLoad(_ webView: UIWebView){ 
     MBProgressHUD.hide(for: self.view, animated: true) 

    } 

    public func webView(_ webView: UIWebView, didFailLoadWithError error: Error){ 
     MBProgressHUD.hide(for: self.view, animated: true) 
    } 
} 

Siehe This

+0

Wo verstecken Sie es? – User511

+0

@ User511 in WebView DidFailLoadWithError und WebViewDidFinishLoad – Dia

+0

Ja, ich sah, dass meine Antwort zu überprüfen. Verberge es wie ich es erwähnt habe. – User511

Antwort

3

Versuchen Sie, Ihren Code folgendermaßen zu ersetzen:

class LiveViewController: UIViewController, UIWebViewDelegate { 
    var isHudShow = false 
    @IBOutlet weak var liveWebView: UIWebView! 

    var spinnerActivity: MBProgressHUD! = nil 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     liveWebView.delegate = self 
     let embededHTML = "<html><body><iframe src=\"\" width=\"100%\" height=\"500\" frameborder=\"0\" scrolling=\"no\"></iframe></body></html>" //link removed 
     liveWebView.loadHTMLString(embededHTML, baseURL: nil) 
    } 

    public func webViewDidStartLoad(_ webView: UIWebView){ 
    if isHudShow == false 
     { 
     MBProgressHUD.showAdded(to: self.view, animated: true) 
     isHudShow =true 
     } 

    } 

    public func webViewDidFinishLoad(_ webView: UIWebView){ 
    MBProgressHUD.hide(for: self.view, animated: true) 
    } 

    public func webView(_ webView: UIWebView, didFailLoadWithError error: Error){ 
    MBProgressHUD.hide(for: self.view, animated: true) 
    } 
} 
+0

MBProgressHUD.hide (animiert: true) gibt einen Fehler, Missing Argument für Parameter 'für' – Dia

+0

Dank .. aber es funktioniert immer noch nicht :( – Dia

+0

Überprüfen Sie jetzt, ob es für Sie funktioniert ... – User511