Как получить доступ к goBack и goForward через UIViewRepresentable - PullRequest
0 голосов
/ 25 июня 2019

Я добавил WKwebview в SwiftUI через UIVewRepresentable. У меня возникают проблемы с получением некоторых кнопок, чтобы веб-просмотр возвращался и шел вперед. Ниже приведены два класса, которые я сделал, но у меня даже не получается печатать на работу (возможно, ошибка?).

import SwiftUI

import WebKit

struct Webview : UIViewRepresentable {

let request: URLRequest

func makeUIView(context: Context) -> WKWebView  {
    return WKWebView()
}

func updateUIView(_ uiView: WKWebView, context: Context) {
    uiView.load(request)
}

func goBack(){
    // go back
    print("go back")
}

func goForward (){
    // go forward
    print("go forward")
}
}



import SwiftUI

struct FullWebView : View {

let webview = Webview(request: URLRequest(url: URL(string: "https://www.apple.com")!))

var body: some View {
    VStack{
        HStack{
            Button(action: {
                //do something
                self.webview.goBack()
            }){
                Text("back")
            }

            Spacer()

            Button(action: {
                //do something
                self.webview.goForward()
            }){
                Text("forward")
            }

        }

        webview
    }
}
}

1 Ответ

1 голос
/ 26 июня 2019

dfd спасибо, что указали мне правильный путь, ваш ответ нуждался в небольшой модификации, потому что добавление webview в качестве var к struct означает, что мне нужно было установить для него значение при его использовании, поэтому мне также пришлось добавитьпользовательский метод инициализации.В любом случае, вот код, который работает.

Структура веб-просмотра

import SwiftUI

import WebKit

struct Webview : UIViewRepresentable {


    let request: URLRequest
    var webview: WKWebView?

    init(web: WKWebView?, req: URLRequest) {
        self.webview = WKWebView()
        self.request = req
    }

    func makeUIView(context: Context) -> WKWebView  {
        return webview!
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.load(request)
    }

    func goBack(){
        webview?.goBack()
    }

    func goForward(){
        webview?.goForward()
    }
  }

, а вот структура, использующая веб-просмотр и добавление кнопок вверху

import SwiftUI

struct FullWebView : View {


let webview = Webview(web: nil, req: URLRequest(url: URL(string: "https://www.apple.com")!))

var body: some View {
    VStack{
        HStack{
            Button(action: {
                //do something
                self.webview.goBack()
            }){
                Text("back")
            }

            Spacer()

            Button(action: {
                //do something
                self.webview.goForward()
            }){
                Text("forward")
            }

        }

        webview
    }
}
}
...