在 Swift 4 中使用 webkit 在 webView 中拉取刷新



我已经在我的代码中添加了拉动刷新功能,当我开始拉取它时会出现图标刷新,但是当我在 Web 视图中进行更改时,例如勾选复选框或在文本框中输入文本,为什么它没有重置回默认视图?

import UIKit
import WebKit
class ViewController: UIViewController,WKNavigationDelegate,UIWebViewDelegate {
    @IBOutlet weak var activityIndicator: UIActivityIndicatorView!
    @IBOutlet weak var webView: WKWebView!
    @IBOutlet var containerView: UIView? = nil
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview(self.activityIndicator)
        self.view.addSubview(self.webView)

        let url:URL = URL(string : "https://www.facebook.com/")!
        let urlRequest : URLRequest = URLRequest(url: url)
        webView.load(urlRequest)

        //activity indicator
        self.webView.addSubview(self.activityIndicator)
        self.activityIndicator.startAnimating()
        self.webView.navigationDelegate = self
        self.activityIndicator.hidesWhenStopped = true
        self.webView.navigationDelegate=self;

        //refresh
        webView.scrollView.bounces = true
        let refreshControl = UIRefreshControl()
        refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView), for: UIControlEvents.valueChanged)
        webView.scrollView.addSubview(refreshControl)
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear( animated )
        let url:URL = URL(string : "https://www.facebook.com/")!
        let urlRequest : URLRequest = URLRequest(url: url)
        webView.load(urlRequest)
    }
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        activityIndicator.stopAnimating()
    }
    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        activityIndicator.stopAnimating()
    }

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        activityIndicator.startAnimating()
    }
    @objc func refreshWebView(sender: UIRefreshControl) {
        print("refersh")
        //
        sender.endRefreshing()
    }

}

编辑:我找到了一个解决方案,如何拉动刷新指示器等到 Web 视图完成加载:

我使用了UIRefreshControl而不是UIAactivityIndicator。

import UIKit
import WebKit
class ViewController:     UIViewController,WKNavigationDelegate,UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()
    let url:URL = URL(string : "https://www.google.com")!
    let urlRequest : URLRequest = URLRequest(url: url)
    webView.loadRequest(urlRequest)
    //refresh
    webView.scrollView.alwaysBounceVertical = true
    let refreshControl = UIRefreshControl()
    refreshControl.tintColor = .white
    let attributes = [NSForegroundColorAttributeName: UIColor.white]
    let attributedTitle = NSAttributedString(string: "refreshing ...", attributes: attributes)
    refreshControl.attributedTitle = attributedTitle
    refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView), for: UIControlEvents.valueChanged)
    refreshControl.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
    webView.scrollView.refreshControl = refreshControl
}
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear( animated )
    let url:URL = URL(string : "https://www.google.com")!
    let urlRequest : URLRequest = URLRequest(url: url)
    webView.loadRequest(urlRequest)
}
func webViewDidFinishLoad(_ webView: UIWebView) {
  self.webView.scrollView.refreshControl?.endRefreshing()
}
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
    self.webView.scrollView.refreshControl?.endRefreshing()
}

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    return true
}
@objc func refreshWebView(sender: UIRefreshControl) {
    print("refresh")
    self.webView.reload()
}

最新更新