我是IOS编程和SwiftUI的新手。我想学习SwiftUI。我有一个WKWebView。我想根据WKWebView中的URL更改来更改SwiftUI页面。正如您在下面看到的,我做了很多工作。但是我在导航方面很挣扎。
struct ContentView: View, Listener {
func onFetched() {
NavigationLink(destination: MainView()) {/* HERE this is not working.
App never goes to MainView.swift page.*/
Text("Show Detail View")
}
}
var body: some View {
NavigationView {
VStack {
WebView(authListener: self)
}.navigationBarTitle(Text("PEAKUP Velocity"))
}
}
}
struct WebView: UIViewRepresentable {
var listener: Listener
@ObservedObject var observe = observable()
func makeUIView(context: Context) -> WKWebView {
return WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
observe.observation = uiView.observe(\WKWebView.url, options: .new) { view, change in
if let url = view.url {
self.observe.loggedIn = true // We loaded the page
self.listener.onFetched()
uiView.isHidden = true
}
}
uiView.load("https://google.com")
}
}
protocol Listener {
func onFetched()
}
更新:我在onFetched()中尝试过此方法:
NavigationLink(destination: MainView()) { Text("") }''''
And I tried this piece of code:
NavigationView {
NavigationLink(destination: SecondView()){
Text("Navigation Link")
}
}
** 免责声明 我没有在SwiftUI的上下文中使用WKWebviews,但我认为这是正确的。 **
我建议您调查WKNavigationDelegate
。除非您的类的类型为WKWebView
,否则您需要确保分配一个委托来处理任何导航事件。
也许您会发现以下文章有帮助:https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebview
您是否可以尝试像这样更改onFetched()
方法:
struct ContentView: View, Listener {
func onFetched() {
self.presentation(Modal(MainView(), onDismiss: {
print("Dismissed")
}))
}
var body: some View {
NavigationView {
VStack {
WebView(authListener: self)
}.navigationBarTitle(Text("PEAKUP Velocity"))
}
}
}