ios - 从 WKWebView 操作导航 SwiftUI 页面

标签 ios swift wkwebview swiftui navigationlink

我是 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/

相关文章:

ios - 在已选择的段上点击时检测事件

ios - 如何在 Swift 中向 UIImageView 添加自定义形状?

ios - 在 UIView 动画 block 中调用 layoutIfNeeded 会导致 subview 更早移动

ios - WKWebView 在外部浏览器中打开 PDF

swift - 如何让 Xcode 在混合应用程序的 webview 中查找元素?

ios - 如何使用 SWIFT 显示多文档 PDF 页面的单页

Swift 的字典键列表不同于 Objective-C

swift - Core Data 中父实体的计算属性

ios - 核心数据值快速访问错误

swift - TableView Cell 的高度不会根据 WebView 动态变化