webview加载完成后,活动指示器不会停止

时间:2016-03-10 18:52:48

标签: ios swift uiwebview uiactivityindicatorview indicator

任何人都知道为什么我的活动指示器在webview加载完毕后没有停止? Web视图被委派,UIActivityIndicatorView开始动画等,在我的代码中......?

这是相关代码:

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var webview: UIWebView!
@IBOutlet weak var activity: UIActivityIndicatorView!

var url = "http://apple.com"

func loadURL () {
    let requestURL = NSURL(string: url)
    let request = NSURLRequest(URL: requestURL!)
    webview.loadRequest(request)

}

override func viewDidLoad() {
    super.viewDidLoad()
    loadURL()
    // Do any additional setup after loading the view, typically from a nib.
    webview.delegate = self;
    }


func webviewDidStartLoad(_ : UIWebView){
activity.startAnimating()

    NSLog("The webview is starting to load")
    }

func webviewDidFinishLoad(_ : UIWebView){
    activity.stopAnimating()
    activity.hidden=true;
    NSLog("The webview is done loading")
    }

谢谢!

4 个答案:

答案 0 :(得分:3)

记住功能名称!它的webView ...,骆驼案例:)

答案 1 :(得分:0)

你得到了#34; webview已经完成加载"?如果没有,可能要求它花很长时间才能完成它。

但是,您应该实施this.getAttribute('src') 来检测是否存在任何错误并停止活动。

答案 2 :(得分:0)

实际上,正确的答案可能是DAN和iGongora的组合,加上可能的第三个原因。

直接的问题是,即使在一个快乐的路径场景(webview成功完成)的情况下,它应该是以下内容(注意函数名称web V iewDidStartLoad和web的情况的 V iewDidFinishLoad

func webViewDidStartLoad(webView: UIWebView) {
    activity.startAnimating()
    NSLog("The webview is starting to load")
}

 func webViewDidFinishLoad(webView: UIWebView) {
    activity.stopAnimating()
    activity.hidden=true;
    NSLog("The webview is done loading")
}

此外,如果UIWebView失败,您还应该停止微调器。

func webView(webView: UIWebView!, didFailLoadWithError error: NSError!) {
    activity.stopAnimating()
    activity.hidden=true;
    print("Webview fail with error \(error)");
}

另一个可能的问题是,如果您没有正确设置委托。您可以在viewDidLoad或Interface Builder中执行此操作。

override func viewDidLoad() {
    super.viewDidLoad()
    ...
    self.webView.delegate = self;
    ...
}

答案 3 :(得分:0)

在主队列中运行此操作,这样就会停止其​​他方式而不是此swift 4和swift 3的代码

 Dispatchqueue.main.async{
      activity.stopAnimating()
 }