Перейдите на страницу SwiftUI из операции WKWebView - PullRequest
1 голос
/ 14 октября 2019

Я новичок в программировании на IOS, а также в SwiftUI. Исходя из Java / Kotlin Android. Я хочу изучать SwiftUI. У меня есть WKWebView. Я хочу изменить страницу SwiftUI в соответствии с изменениями URL в WKWebView. Я проделал большую работу, как вы можете видеть ниже. Но я испытываю затруднения в навигации.

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()
    }

1 Ответ

1 голос
/ 14 октября 2019

** Отказ от ответственности Я не использовал WKWebviews в контексте SwiftUI, но я предполагаю, что то же самое будет верно. **

Я бы порекомендовал заглянуть в WKNavigationDelegate. Если ваш класс не имеет типа WKWebView, вам необходимо убедиться, что вы назначили делегата для обработки любых событий навигации.

Возможно, вы найдете следующую статью полезной: https://www.hackingwithswift.com/articles/112/the-ultimate-guide-to-wkwebview

...