如何修改文件打开面板

问题描述 投票:0回答:1

我正在构建一个使用 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)
        }
    }
}
macos swiftui wkwebview
1个回答
0
投票

使用

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.