我已经在我的代码中添加了拉动刷新功能,当我开始拉取它时会出现图标刷新,但是当我在 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()
}