オフライン状態を取得
WKWebViewでインターネット接続に失敗した(オフライン状態)時に自作のエラー画面を出したかったので調べました。
備忘録として書いておきます。
ViewController.swift
import UIKit
import WebKit
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
let error = error as NSError
if error.code == -1009 {
print("offline")
//オフライン時の処理
}
}
codeの値が1009だった場合インターネット接続がないようです。
実際に行った実装
ViewController.swift
import UIKit
import WebKit
class DetailOfArticleController: UIViewController {
let detailOfArticleView = DetailOfArticleView.instance()
let errorPageView = ErrorPageView.instance()
var getUrl = ""
var activityIndicatorView = UIActivityIndicatorView()
override func viewDidLoad() {
super.viewDidLoad()
detailOfArticleView.frame = self.view.frame
self.view.addSubview(detailOfArticleView)
openUrl(urlsting: getUrl)
detailOfArticleView.wkWebView.navigationDelegate = self
activityIndicatorView.center = view.center
activityIndicatorView.style = .whiteLarge
activityIndicatorView.color = UIColor(hex: "660066")
view.addSubview(activityIndicatorView)
}
func openUrl(urlsting: String) {
let url = URL(string: urlsting)
let urlRequest = URLRequest(url: url!)
detailOfArticleView.wkWebView.load(urlRequest)
}
}
extension DetailOfArticleController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
activityIndicatorView.alpha = 1
activityIndicatorView.startAnimating()
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
activityIndicatorView.alpha = 0
activityIndicatorView.stopAnimating()
}
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
let error = error as NSError
if error.code == -1009 {
print("offline")
//オフライン時の処理
activityIndicatorView.alpha = 0
activityIndicatorView.stopAnimating()
errorPageView.frame = self.view.frame
self.view.addSubview(errorPageView)
}
}
}
こちらはニュースアプリのように一覧ページから詳細ページ(WKWebViewを用いてwebページを表示)へ遷移させています。
getUrlは一覧ページからタップした際に取得しています。
参考
http://harumi.sakura.ne.jp/wordpress/2019/03/04/wkwebviewでインターネット接続エラーを取得する/
上記の記事を参考にさせていただきました。
ありがとうございます!