Swift・iOS

Swiftを中心に学んだことを記録に残すブログです。技術に関係ない記事もたまに書いています。

【Swift】WKWebViewでHTMLを表示する

■はじめに

WKWebViewでHTMLを表示してみたので記録に残します。

 

■開発環境

Xcode 10.1

・Swift 4.2.1

 

■サンプル

import UIKit
import WebKit

class ViewController: UIViewController {
    
    var webView: WKWebView!
    var loadString: String = "{ここにHTMLが入る}"
    
    override func loadView() {
        super.loadView()
        self.createView()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.webView.uiDelegate = self
        
        // HTMLを読み込む
        self.webView.loadHTMLString(loadString,baseURL: nil)
        
        // スワイプで画面遷移できるようにする
        self.webView.allowsBackForwardNavigationGestures = true
        
        // リフレッシュコントロールの設定
        let refreshControl = UIRefreshControl()
        if #available(iOS 10.0, *) {
            self.webView.scrollView.refreshControl = refreshControl
            refreshControl.addTarget(self, action: #selector(ViewController.refreshWebView(sender:)), for: .valueChanged)
        }
    }
    
    // Viewの作成
    func createView() {
        let rect = CGRect( x: 0, y: 0, width: self.view.frame.width,
                           height: self.view.frame.height)
        let viewConfiguration = WKWebViewConfiguration()
        self.webView = WKWebView(frame: rect, configuration: viewConfiguration)
        
        view.addSubview(self.webView)
        view.sendSubviewToBack(self.webView)
    }
    
    // スワイプでリロードする
    @objc func refreshWebView(sender: UIRefreshControl) {
        self.webView.loadHTMLString(loadString,baseURL: nil)
        sender.endRefreshing()
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

// target=_blankが設定されたページも開けるようにする
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
    }
}

 

■おわりに

サンプルにある画面遷移に関する実装やtarget=_blankが設定されたページも開けるようにする実装に関しては以前記事にしているので、関連リンクに記載に記載しておきます。

 

■関連リンク

loadHTMLString(_:baseURL:) - WKWebView | Apple Developer Documentation

【Swift】WKWebViewで進む/戻る/更新(リロード)機能を実装する - Swift実践ブログ

【Swift】WKWebViewでリンク先が開けない場合の対処法(ATS/target=”_blank”) - Swift実践ブログ