Otafuku提供了一些实用类,用于使用WKWebView。
WebViewUIController
来处理WKUIDelegate方法,类似于常规浏览器通过呈现一个警告来实现。WebViewPropertyObserver
通过一个注册的闭包和Swift枚举来通知WKWebView属性值变化。使用这个类,无需KVO代码即可知道WKWebView属性值的变化。WebViewUIController
处理WKUIDelegate。
如下所示,只需在UIViewController的viewDidLoad中声明一个WebViewUIController
的属性并将其设置为WKWebView.UIDelegate。
class ViewController: UIViewController {
let uiDelegate = WebViewUIController()
override func viewDidLoad() {
super.viewDidLoad()
webView.UIDelegate = uiDelegate
}
}
WebViewPropertyObserver
通知WKWebView属性值变化。
如下所示,声明一个WebViewPropertyObserver
的属性,以在整个ViewController生命周期中保留其对象。
初始化时,传入WKWebView对象和用于处理WKWebView属性变化的闭包。
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
}
}
}
platform :ios, '8.0'
use_frameworks!
pod 'Otafuku'
Otafuku在MIT许可证下发布。有关详情,请参阅LICENSE。