【问题标题】:Activity indicator not stopping when webview has finished loading当 webview 完成加载时,活动指示器不会停止
【发布时间】:2016-03-10 18:52:47
【问题描述】:

任何人都知道为什么我的活动指示器在 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")
    }

谢谢!

【问题讨论】:

    标签: ios swift uiwebview uiactivityindicatorview indicator


    【解决方案1】:

    注意函数名称!是 webView...,驼峰式 :)

    【讨论】:

    • 丹是赢家! (投票。)任何时候你有一个委托方法,如果名称或方法签名与委托方法的定义不同,它将不会被调用。这在某些时候会咬到每个人。在您的委托方法中设置断点并确保它们被调用(或像您正在做的那样使用日志语句。)如果没有调用该方法,请尝试从文档或头文件中复制/粘贴方法定义。
    【解决方案2】:

    您是否收到“Webview 已完成加载”?如果没有,可能是请求需要很长时间才能完成。

    但是,您应该实现func webView(webView: UIWebView, didFailLoadWithError error: NSError?) 来检测是否有任何错误并停止活动。

    【讨论】:

      【解决方案3】:

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

      直接的问题是,即使在快乐的路径场景中(webview 成功完成),它也应该是以下(注意函数名称 webViewDidStartLoad 和 web ViewDidFinishLoad

      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;
          ...
      }
      

      【讨论】:

        【解决方案4】:

        在主队列中运行它,否则这将停止,而不是这个 swift 4 和 swift 3 的代码

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多