SwiftUI Возвращает предыдущий URL из UIViewRepresentable - PullRequest
0 голосов
/ 10 марта 2020

У меня проблемы с возвратом currentURL и previousURL из пользовательского WebView. То, что я хочу сделать, это отобразить webView и вернуть 2 переменные URL при загрузке сети.

Пока я могу отображать только предоставленный URL. Так что есть идеи, как я могу вернуть currentURL и previousURL из UIViewRepresentable?

Вот мой пользовательский вид

struct CustomWebView: View {

@Environment(\.presentationMode) var presentationMode
var url: String
var encode = true
var auth: Bool
@State var isLoading = true

 var body: some View {
    ZStack {
        ResresentableWebView(url: url, encode: encode, auth: auth, isLoading: $isLoading)
        ActivityIndicator(isAnimating: $isLoading, color: #colorLiteral(red: 0, green: 0.8274509804, blue: 0.7843137255, alpha: 1) , style: .large)
    }.modifier(NoBar())
}
}
struct ResresentableWebView: UIViewRepresentable {

var url: String
var encode: Bool
var auth: Bool
var currentUrl: String
var previuousUrl: String

@ObservedObject var observe = observable()
@Binding var isLoading: Bool

func makeUIView(context: UIViewRepresentableContext<ResresentableWebView>) -> WKWebView {
    var strUrl = self.url
    if auth {
        if UserData.shared.accessToken != "" && UserData.shared.refreshToken != "" {
            strUrl += "&accessToken=\(UserData.shared.accessToken)&refreshToken=\(UserData.shared.refreshToken)"
        }
    }
    guard let encodedUrl = strUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return WKWebView()}
    debugPrint("Encoded Url", encodedUrl)

    guard let url = URL(string: encode ? encodedUrl: self.url) else {
        return WKWebView()
    }

    let request = URLRequest(url: url)
    let webView = WKWebView()
    webView.navigationDelegate = context.coordinator
    webView.load(request)

    return webView
}

func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<ResresentableWebView>) {
    observe.observation = uiView.observe(\WKWebView.url, options: .new) { view, change in
        if let title = view.url {
            self.observe.loggedIn = true
            debugPrint("Page loaded: \(title)")
            view.evaluateJavaScript(jsScript) { (_, _) in  }
        }
    }
}



func makeCoordinator() -> Coordinator {
    debugPrint("Making Coordinator")
    return Coordinator(self)
}

class Coordinator : NSObject, WKNavigationDelegate {

    var webview: ResresentableWebView

    init(_ webview: ResresentableWebView) {
        self.webview = webview
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

        webView.alpha = 0
        DispatchQueue.main.asyncAfter(deadline: .now() + 1.2) {
            webView.evaluateJavaScript(jsScript) { (_, _) in  }
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
                self.webview.isLoading = false
                webView.alpha = 1
            }

        }

    }

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        self.webview.isLoading = true
    }

    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        self.webview.isLoading = false
    }

}
}
class ObservableVariable: ObservableObject {
@Published var observation:NSKeyValueObservation?
@Published var loggedIn = false

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...