twilio-rn/modules/my-native-module/ios/MyNativeModuleView.swift

39 lines
991 B
Swift
Raw Normal View History

import ExpoModulesCore
import WebKit
// This view will be used as a native component. Make sure to inherit from `ExpoView`
// to apply the proper styling (e.g. border radius and shadows).
class MyNativeModuleView: ExpoView {
let webView = WKWebView()
let onLoad = EventDispatcher()
var delegate: WebViewDelegate?
required init(appContext: AppContext? = nil) {
super.init(appContext: appContext)
clipsToBounds = true
delegate = WebViewDelegate { url in
self.onLoad(["url": url])
}
webView.navigationDelegate = delegate
addSubview(webView)
}
override func layoutSubviews() {
webView.frame = bounds
}
}
class WebViewDelegate: NSObject, WKNavigationDelegate {
let onUrlChange: (String) -> Void
init(onUrlChange: @escaping (String) -> Void) {
self.onUrlChange = onUrlChange
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation) {
if let url = webView.url {
onUrlChange(url.absoluteString)
}
}
}