2016-03-10 2 views
0

У кого-нибудь есть идея, почему мой индикатор активности не останавливается, когда веб-просмотр закончил загрузку? Веб-представление делегировано, UIActivityIndicatorView начать анимацию и т. Д., Находится в моем коде ...?Индикатор активности не останавливается при завершении webview

Это соответствующий код:

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

Спасибо!

ответ

3

Помните имена функций! Это webView ..., случай с верблюдом :)

+1

Дэн является победителем! (проголосовали.) Каждый раз, когда у вас есть метод делегата, если подпись имени или метода отличается от определения метода делегата, он не будет вызван. Это укусит всех в какой-то момент. Установите точку останова в своих методах делегата и убедитесь, что они вызываются (или используют оператор журнала, как вы это делаете.) Если этот метод не вызывается, попробуйте скопировать/вставить определение метода из документов или файлов заголовков. –

0

Получаете ли вы, что «просмотр веб-страницы загружен» ?. Если нет, то, вероятно, это займет очень много времени, чтобы завершить его.

Однако вы должны реализовать func webView(webView: UIWebView, didFailLoadWithError error: NSError?), чтобы определить, есть ли какие-либо ошибки и остановить действие.

0

Собственно, правильный ответ - это, вероятно, комбинация DAN и iGongora, а также возможная третья причина.

Непосредственная проблема заключается в том, что даже в счастливом пути сценарий (где WebView заканчивается успешно) является то, что он должен быть следующим (обратите внимание на случай имен функций сети V iewDidStartLoad и веб 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; 
    ... 
} 
0

Выполнить это в основной очереди, так это остановит другой мудрый не код для этого стрижа 4 и быстры 3

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