Created
February 12, 2020 15:36
-
-
Save joshbetz/2ff5922203240d4685d5bdb5ada79105 to your computer and use it in GitHub Desktop.
A simple SwiftUI Webview
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
import WebKit | |
struct ContentView: View { | |
var body: some View { | |
Webview(url: URL(string: "https://google.com")!) | |
} | |
} | |
struct Webview: UIViewRepresentable { | |
let url: URL | |
func makeUIView(context: UIViewRepresentableContext<Webview>) -> WKWebView { | |
let webview = WKWebView() | |
let request = URLRequest(url: self.url, cachePolicy: .returnCacheDataElseLoad) | |
webview.load(request) | |
return webview | |
} | |
func updateUIView(_ webview: WKWebView, context: UIViewRepresentableContext<Webview>) { | |
let request = URLRequest(url: self.url, cachePolicy: .returnCacheDataElseLoad) | |
webview.load(request) | |
} | |
} |
Something like that should work for navigation handling:
import SwiftUI
import WebKit
struct SAWebView: View {
var body: some View {
Webview(url: URL(string: "https://google.com")!)
}
}
struct Webview: UIViewRepresentable {
let url: URL
let navigationHelper = WebViewHelper()
func makeUIView(context: UIViewRepresentableContext<Webview>) -> WKWebView {
let webview = WKWebView()
webview.navigationDelegate = navigationHelper
let request = URLRequest(url: self.url, cachePolicy: .returnCacheDataElseLoad)
webview.load(request)
return webview
}
func updateUIView(_ webview: WKWebView, context: UIViewRepresentableContext<Webview>) {
let request = URLRequest(url: self.url, cachePolicy: .returnCacheDataElseLoad)
webview.load(request)
}
}
class WebViewHelper: NSObject, WKNavigationDelegate {
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("webview didFinishNavigation")
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("didStartProvisionalNavigation")
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print("webviewDidCommit")
}
func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
print("didReceiveAuthenticationChallenge")
completionHandler(.performDefaultHandling, nil)
}
}
Hey man, this is great, thanks! How would you access the currently loaded URL?
Great way to display WebView in SwiftUI, thanks!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
How do I catch if the URL changed using your approach?