■はじめに
スワイプで進む/戻る/更新(リロード)機能を実装してみたのでまとめます。
■開発環境
・Xcode 9.4.1
・Swift 4.1.2
■進む/戻る機能の実装
インスタンスプロパティ「allowsBackForwardNavigationGestures」で、スワイプで進む/戻る機能を有効にできます。
webView.allowsBackForwardNavigationGestures = true
■更新(リロード)機能の実装
bouncesを有効にし、UIRefreshControlをインスタンス化。更新に関するメソッドのイベントを受け取るよう下記のように実装します。
self.webView.scrollView.bounces = true
let refreshControl = UIRefreshControl()
self.webView.scrollView.refreshControl = refreshControl
refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView(sender:)), for: .valueChanged)
更新に関するメソッドは以下。
@objc func refreshWebView(sender: UIRefreshControl) {
webView.reload()
sender.endRefreshing()
}
■サンプル
import UIKit
import WebKit
class ViewController: UIViewController {
var webView: WKWebView!
override func loadView() {
super.loadView()
let viewConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: viewConfiguration)
self.view = webView
webView.uiDelegate = self
webView.navigationDelegate = self
webView.allowsBackForwardNavigationGestures = true
self.webView.scrollView.bounces = true
let refreshControl = UIRefreshControl()
self.webView.scrollView.refreshControl = refreshControl
refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView(sender:)), for: .valueChanged)
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "{表示したいURL}")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@objc func refreshWebView(sender: UIRefreshControl) {
webView.reload()
sender.endRefreshing()
}
}
extension ViewController: WKUIDelegate {
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
if navigationAction.targetFrame == nil {
webView.load(navigationAction.request)
}
return nil
}
}
■おわりに
スワイプで更新する機能に関しては実装方法がいくつかネット上で紹介されていますが、うまくいかない方の参考になればと思います。
■関連リンク
・allowsBackForwardNavigationGestures - WKWebView | Apple Developer Documentation
・bounces - UIScrollView | Apple Developer Documentation
・UIRefreshControl - UIKit | Apple Developer Documentation
・[iOS 10] 全てのスクロールビューでRefresh Controlがサポートされました | Developers.IO