2

我是 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()
    }
4

1 回答 1

1

**免责声明 我没有在 SwiftUI 的上下文中使用 WKWebviews,但我认为也是如此。**

我建议调查一下WKNavigationDelegate。除非您的类是类型,否则您WKWebView需要确保分配一个委托来处理任何导航事件。

也许您会发现以下文章很有帮助:https ://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebview

于 2019-10-14T14:29:11.867 回答