如何检查WkWebView是否在Objective-C中完成加载?

时间:2016-03-30 15:26:45

标签: ios objective-c wkwebview wkwebviewconfiguration

我想使用WkWebView加载HTML页面,我希望在它完成加载后显示页面。只要它加载我想在空视图上显示活动指示器。 我创建了两个视图,一个loadingView和一个wkWebView。当页面加载时我将VC添加为子视图loadingView,之后我想删除loadingView并添加wkWebView。这是我的代码:

    [self addSubview:_loadingView];
    _wkWebView = [[WKWebView alloc] initWithFrame:self.frame];
    _wkWebView.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height);

    //Send a request to wkUrlconnection
    NSURL *wkUrl = [NSURL URLWithString:self.wkUrlString];
    NSURLRequest *wkRequest = [NSURLRequest requestWithURL:wkUrl];

    //Here I want to check if it's loaded and then remove loadingView and add wkWebView
    [_wkWebView loadRequest:wkRequest];
    [self.loadingView removeFromSuperview];
    [self addSubview:_wkWebView];

有人可以告诉我在加载时如何检查,如果完成刷新VC?谢谢你的回答。

4 个答案:

答案 0 :(得分:49)

我认为WKNavigationDelegate webView:didFinishNavigation:代表回调是你正在寻找的。

在开始加载时配置并显示活动指示符,然后在调用回调时停止并将其从视图中删除。

答案 1 :(得分:4)

迅速4.2:

func webView(_ webView: WKWebView,
                 didFinish navigation: WKNavigation!){
        print("loaded")
}

请确保在didLoad(或类似程序)中为webView设置委托

webView.navigationDelegate = self

答案 2 :(得分:3)

对于任何遇到包含多个框架的网页并因此进行多次加载而干扰您的加载动画的问题的人,我已经实现了以下方法,并且该方法对我迄今为止遇到的所有情况都有效:

Swift 4.2:

<option>

基本思想是在请求url之前启动加载动画,然后对每个请求进行计数,并仅在您的请求计数== 0时才停止加载动画。这是在稍微延迟之后完成的,因为我发现有些延迟帧同步排队请求,因此下一个加载将在0.1秒延迟完成之前开始。

(͡°͜ʖ͡°)

答案 3 :(得分:2)

class WebViewVC: UIViewController {
    
    // MARK: IBOutlets
    @IBOutlet weak var webView: WKWebView!
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    
    // MARK: Life cycle
    override func viewDidLoad() {
        super.viewDidLoad()
        
        webView.navigationDelegate = self
        loadWebsite()
    }
}

// MARK: WKWebView
extension WebViewVC: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        activityIndicator.startAnimating()
    }
    
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        activityIndicator.stopAnimating()
    }
}

// MARK: Private methods
extension WebViewVC {
    private func loadWebsite() {
        guard let url = URL(string: "google.com") else { return }
        
        let urlRequest = URLRequest(url: url)
        webView.load(urlRequest)
    }
}