如何使 WKWebView 成为第一响应者并在滚动后响应键盘快捷键?

时间:2021-05-17 15:31:33

标签: ios swiftui webkit wkwebview first-responder

我已经在 SwiftUI(使用 UIViewRepresentable)中为 iPad 应用布置了几个 WKWebView。

当我只需单击这些视图中的一个时,它就会获得焦点,并且我可以使用特定于网站的各种键盘快捷键(在页面下方的示例代码中,使用这些 DuckDuckGo 快捷键 - https://help.duckduckgo.com/duckduckgo-help-pages/features/keyboard-shortcuts/),以及向上/向下键滚动等

但是,如果我只是滚动网页视图,则它不会获得焦点。

如何使页面在滚动时立即获得焦点(UIKit 术语中的 becomeFirstResponder)。此外,如何在 UI 中显示聚焦的 Web 视图(例如,通过将 Web 视图边框设置为红色)?

我的代码:

import WebKit

struct ContentView: View {
    var body: some View {
        VStack {
            Webview(url: URL(string:"https://duckduckgo.com/?q=stack+overflow&t=h_&ia=web")!)
            Divider()
            Webview(url: URL(string:"https://duckduckgo.com/?q=ipad&t=h_&ia=web")!)
        }
    }
}

struct Webview: UIViewRepresentable {
    let url: URL
    func makeUIView(context: UIViewRepresentableContext<Webview>) -> WKWebView {
        let webview = WKWebView()
        let request = URLRequest(url: self.url, cachePolicy: .returnCacheDataElseLoad)
        webview.load(request)
        return webview
    }
    func updateUIView(_ webview: WKWebView, context: UIViewRepresentableContext<Webview>) {
        let request = URLRequest(url: self.url, cachePolicy: .returnCacheDataElseLoad)
        webview.load(request)
    }
}

0 个答案:

没有答案