Otafuku provides utility classes to use WKWebView.
WebViewUIController
to handle WKUIDelegate methods by presenting an alert as usual browsers do.WebViewPropertyObserver
to notify WKWebView property value change via a registered closure and Swift enum. With this class, no KVO code is needed to know WKWebView property value change.
WebViewUIController
handles WKUIDelegate.
As shown below, simply declare a property of WebViewUIController
and set it to WKWebView.UIDelegate in UIViewController.viewDidLoad.
class ViewController: UIViewController {
let uiDelegate = WebViewUIController()
override func viewDidLoad() {
super.viewDidLoad()
webView.UIDelegate = uiDelegate
}
}
WebViewPropertyObserver
notifies WKWebView property value change.
As shown below, declare a property of WebViewPropertyObserver
to retain its object throughout the ViewController's life cycle.
To initialize, pass a WKWebView object and a closure handling WKWebView's property change.
class ViewController: UIViewController {
@IBOutlet var progressView: UIProgressView!
@IBOutlet var backItem: UIBarButtonItem!
@IBOutlet var forwardItem: UIBarButtonItem!
var propertyObserver: WebViewPropertyObserver?
override func viewDidLoad() {
super.viewDidLoad()
propertyObserver = WebViewPropertyObserver(webView: webView, handler:handleWebViewPropertyChange)
}
func handleWebViewPropertyChange(property: WebViewPropertyObserver.WebViewProperty) {
switch property {
case .Title(let title):
navigationItem.title = title
case .URL(let URL):
// do something with URL
break
case .CanGoBack(let canGoBack):
backItem.enabled = canGoBack
case .CanGoForward(let canGoForward):
forwardItem.enabled = canGoForward
case .EstimatedProgress(let progress):
progressView.progress = progress
case .Loading(let loading):
// do something with loading
break
case .HasOnlySecureContent(let secureContent):
// do something with secureContent
break
}
}
}
- iOS 8.0+
- Swift 3.0
- Xcode 8.0
- Install with CocoaPods
platform :ios, '8.0'
use_frameworks!
pod 'Otafuku'
Otafuku is released under the MIT license. See LICENSE for details.