【问题标题】:How to get UIActivityIndicator to disappear once appearing?如何让 UIActivityIndi​​cator 一旦出现就消失?
【发布时间】:2017-04-10 18:23:48
【问题描述】:

我目前有我的应用程序在打开应用程序时链接到某个 URL,这显然在打开它和 webView 实际加载之间会有延迟,所以我希望它在 webView 加载时显示一个活动指示器,我在我的 ViewController.swift 中有以下代码:

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()
}

活动指示器从一开始就显示,但一旦 webView 加载并永远保持其状态,它就不会消失。

【问题讨论】:

    标签: xcode webview swift3 uiactivityindicatorview activity-indicator


    【解决方案1】:

    您组织代码的方式有点令人困惑。看来您正在声明您的 funcs inside @IBAction 函数。如果是这种情况,这将不起作用。

    试试这个

    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
    }
    

    【讨论】:

    • 感谢您的推荐,我刚刚更新了我的问题,以便更好地显示我正在寻找的内容,如果您想看一下,谢谢!
    • @athill16 我会确保hidesWhenStoppedtrue,正如您所怀疑的那样,并实现didFail 委托方法。当你在webViewDidFinishLoad 中设置断点时,它真的会停在这里吗?
    • 我添加了断点,但它们没有触发,但问题实际上是一个修复了大部分问题的语法,所以我会在帖子中更新。我剩下的唯一问题是 didFail 方法实际上做了什么?是不是这个人的电话连接太差以至于webView无法加载的情况?
    【解决方案2】:

    问题是语法问题,你必须在函数中添加下划线。

    override func viewDidLoad() {
        super.viewDidLoad()
    
        webView.delegate = self
    
        let url = URL(string: "your URL")
        webView.loadRequest(URLRequest(url: url!))
    }
    
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool{
    
        activityIndicator.startAnimating()
        return true
    }
    
    func webViewDidStartLoad(_ webView: UIWebView){
    
        activityIndicator.startAnimating()
    }
    
    func webViewDidFinishLoad(_ webView: UIWebView){
    
        activityIndicator.stopAnimating()
    }
    
    func webView(_ webView: UIWebView, didFailLoadWithError error: Error){
    
        activityIndicator.stopAnimating()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 2016-06-17
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多