我有一个基本的应用程序,显示一个网站,当我按下一个按钮,它应该会把我带到另一个链接,但它不知道为什么我尝试使用@state bool和更改它时,按钮被按下,但没有使用网站加载,但按钮不会改变网站
ContentView.swift
import SwiftUI
import WebKit
import Foundation
struct ContentView: View {
@State private var selectedSegment = 0
@State var websi = "172.20.10.3"
@State private var websites = ["192.168.8.125", "192.168.8.125/Receipts.php","192.168.8.125/myqr.php"]
@State private var sssa = ["Home","MyRecipts","MyQr"]
@State var updater: Bool
var body: some View {
HStack {
NavigationView{
VStack{
Button(action: {
self.websi = "172.20.10.3/myqe.php"
self.updater.toggle()
}) {
Text(/*@START_MENU_TOKEN@*/"Button"/*@END_MENU_TOKEN@*/)
} .pickerStyle(SegmentedPickerStyle());
/* Text("Selected value is: \(websites[selectedSegment])").padding()*/
Webview(url: "http://\(websi)")
}
}
.padding(.top, -44.0)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView( updater: false)
.padding(.top, -68.0)
}
}Webview.swift
import Foundation
import SwiftUI
import WebKit
struct Webview: UIViewRepresentable {
var url: String
func makeUIView(context: Context) -> WKWebView {
guard let url = URL(string: self.url) else{
return WKWebView()
}
let request = URLRequest(url: url)
let wkWebView = WKWebView()
wkWebView.load(request)
return wkWebView
}
func updateUIView(_ uiView: WKWebView, context:
UIViewRepresentableContext<Webview>){
}
}发布于 2020-09-18 03:01:48
以下是使用@ObservableObject的一个可能的解决方案
struct WebView: UIViewRepresentable {
@ObservedObject var viewModel: ViewModel
func makeUIView(context: UIViewRepresentableContext<WebView>) -> WKWebView {
return WKWebView()
}
func updateUIView(_ webView: WKWebView, context: UIViewRepresentableContext<WebView>) {
if let url = URL(string: viewModel.url) {
webView.load(URLRequest(url: url))
}
}
}
extension WebView {
class ViewModel: ObservableObject {
@Published var url: String
init(url: String) {
self.url = url
}
}
}
struct ContentView: View {
@State private var currentWebsite = "https://google.com"
var body: some View {
VStack {
Button("Change") {
self.currentWebsite = "https://apple.com"
}
WebView(viewModel: .init(url: currentWebsite))
}
}
}发布于 2020-09-18 03:55:37
因为您不会在websi更改时召回WebView,所以它不会执行任何操作。您需要向url添加一个@Binding标记,以便它知道要更新。然后你就可以调用
WebView(self.$websi)https://stackoverflow.com/questions/63944468
复制相似问题