0

我目前有我的应用程序打开应用程序链接到一个特定的URL,这显然可以有一个打开它和webView实际加载之间的延迟,所以我希望它显示一个活动指标,无论何时加载webView,我有在我ViewController.swift下面的代码:如何让UIActivityIndi​​cator一旦出现就消失?

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的负载消失,一旦与他们保持永远。

回答

0

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

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

你组织代码的方式有点混乱。看起来你在里面申明了func这个@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 
} 
+0

感谢您的建议,我只是更新了我的问题,以更好地显示我在找什么,如果你想看看,谢谢! – athill16

+0

@ athill16我会确信'hidesWhenStopped'是'true',因为你怀疑它是否实现了'didFail'委托方法。当你在'webViewDidFinishLoad'中放置一个断点时,它实际上停在这里吗? –

+0

我添加了断点,但他们没有触发,但问题实际上是一个修复大部分内容的语法,所以我会在后期更新。我唯一的问题是didFail方法实际上做了什么?这是在这个人的电话连接太差,webView无法加载的情况下? – athill16

相关问题