我正在构建一个使用 SwiftUI 显示 WebView 的应用程序。 我能够显示内容,但是当我单击上传文件时,会出现文件选择面板,但该面板显示在屏幕中央,而不是像 Safari 那样显示在 WebView 的中央。 如何让面板像 Safari 一样出现在窗口中央?
供参考,
UIDelegate
的runOpenPanelWith
方法写如下
public func webView(_ webView: WKWebView, runOpenPanelWith parameters: WKOpenPanelParameters, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping ([URL]?) -> Void) {
let openPanel = NSOpenPanel()
openPanel.prompt = String(localized: "Upload")
openPanel.message = String(localized: "title")
openPanel.canChooseFiles = true
openPanel.begin { (result) in
if result == NSApplication.ModalResponse.OK {
if let url = openPanel.url {
completionHandler([url])
}
} else if result == NSApplication.ModalResponse.cancel {
completionHandler(nil)
}
}
}
beginSheetModal
显示打开的面板。您可以通过 NSWindow
获取所需的 webView.window
。
func handleResult(_ result: NSApplication.ModalResponse) {
if result == NSApplication.ModalResponse.OK, let url = openPanel.url {
completionHandler([url])
} else {
completionHandler(nil)
}
}
if let window = webView.window {
openPanel.beginSheetModal(for: window, completionHandler: handleResult)
} else { // web view is somehow not in a window? Fall back to begin
openPanel.begin(completionHandler: handleResult)
}