繁体   English   中英

swift ui中的重定向链接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM