我是 IOS 编程和 SwiftUI 的新手。来自 Java/Kotlin Android。我想学习 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")
}
}
更新 2:我也在 onFetched 中尝试了这段代码:
self.presentation(Model(MainView(), onDismiss: nil))
更新 3:我试过这个:
self.sheet(isPresented: $sayHello) {
MainView()
}
最佳答案
** 免责声明 我没有在 SwiftUI 的上下文中使用过 WKWebviews,但我认为这也是正确的。 **
我建议查看 WKNavigationDelegate
。除非您的类是 WKWebView
类型,否则您需要确保分配一个委托(delegate)来处理任何导航事件。
也许您会发现以下文章有帮助:https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebview
关于ios - 从 WKWebView 操作导航 SwiftUI 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58378560/