I'm trying to add pull to refresh to a webview app. I've seen some tutorials and many similar questions but my code is different and I'm not sure where to add the UIRefreshControl
. When I say 'my code' its not really my code, rather taken from this repo
Here's my code:
func createWebView(container: UIView, WKSMH: WKScriptMessageHandler, WKND: WKNavigationDelegate, NSO: NSObject, VC: ViewController) -> WKWebView{
let config = WKWebViewConfiguration()
let webView = WKWebView(frame: calcWebviewFrame(webviewView: container, toolbarView: nil), configuration: config)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
webView.isHidden = true;
webView.navigationDelegate = WKND;
webView.scrollView.bounces = true;
return webView
}
extension ViewController: WKUIDelegate {
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
if (navigationAction.targetFrame == nil) {
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(refreshWebView(_:)), for: UIControl.Event.valueChanged)
webView.scrollView.addSubview(refreshControl)
webView.load(navigationAction.request)
}
return nil
}
@objc func refreshWebView(_ sender: UIRefreshControl) {
print("triggered reload");
MyProject.webView?.reload()
sender.endRefreshing()
}
}
I can pull on the page but the refresh indicator doesn't appear. What am I missing?
(I'm very new to swift and iOS programming)
Add these lines to viewDidload method
override func viewDidLoad() {
super.viewDidLoad()
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(refreshWebView(_:)), for: UIControl.Event.valueChanged)
webView.scrollView.addSubview(refreshControl)
}