[英]Redirect link in swift ui
我正在为 iOS 开发一个 Web 应用程序。 我希望当用户点击链接中的链接时,链接会被重定向。 我需要这个,因为我需要粘贴为它后面的用户创建的令牌。 目前,重定向链接是 nu.nl。 我现在有这个,但不幸的是它不起作用。 我不熟悉语言 swift ui。 在此先感谢您的帮助 :)
内容视图
import SwiftUI
import Foundation
import WebKit
struct ContentView: View {
var body: some View {
WebView(url: URL(string:"https://ferocity.bytemountains.com/client")!).frame(maxWidth: .infinity, maxHeight: .infinity).edgesIgnoringSafeArea(.all)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
网页浏览
import Foundation
import SwiftUI
import WebKit
struct WebView: UIViewRepresentable {
let url: URL
let webView = WKWebView()
func makeUIView(context: Context) -> some UIView {
let request = URLRequest(url: url)
webView.load(request)
return webView
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) {
if(navigationAction.navigationType == .other) {
if navigationAction.request.url != nil {
//do what you need with url
webView.load(URLRequest(url: URL(string: "https://nu.nl/")!))
}
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
func updateUIView(_ uiView: UIViewType, context: Context) {
}
}
您必须使用Coordinator
,然后需要符合WKNavigationDelegate
才能调用其委托方法。
struct WebView : UIViewRepresentable {
let url: URL
var webView = WKWebView()
func makeUIView(context: Context) -> WKWebView {
let request = URLRequest(url: url)
webView.load(request)
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.navigationDelegate = context.coordinator
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
//Conform to WKNavigationDelegate protocol here and declare its delegate
class Coordinator: NSObject, WKNavigationDelegate {
var parent: WebView
init(_ parent: WebView) {
self.parent = parent
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
//Navigate to other URL if user clicks on the sign in link
if navigationAction.request.url?.absoluteString == "https://sso.bytemountains.com/?clientId=2" {
webView.load(URLRequest(url: URL(string: "https://nu.nl/")!))
}
decisionHandler(.allow)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.