MacOS Swift应用设置视图选择文件夹后消失问题排查
设置视图选择文件夹后消失的原因及解决方案
问题原因
问题出在你调用NSOpenPanel的runModal()方法上。在macOS的SwiftUI Settings场景中,设置窗口属于系统管理的临时窗口,当你以模态方式打开文件选择面板时,设置窗口会失去激活状态;而当模态面板关闭后,系统会判定设置窗口不再被需要,自动将其关闭,这就是选择完文件夹后设置视图消失的核心原因。
解决方案
改用表单(Sheet)方式呈现文件选择面板,这样设置窗口不会失去激活状态,面板关闭后设置视图会正常保留。修改selectFolder()方法如下:
private func selectFolder() { // 获取当前激活的设置窗口 guard let keyWindow = NSApplication.shared.windows.first(where: { $0.isKeyWindow }) else { return } let panel = NSOpenPanel() panel.canChooseFiles = false panel.canChooseDirectories = true panel.allowsMultipleSelection = false panel.prompt = "Select folder" // 以Sheet形式打开面板 panel.beginSheetModal(for: keyWindow) { response in if response == .OK, let selectedURL = panel.url { let newFolderSelection = FolderSelection.predefined(selectedURL) if !destinationFolders.contains(where: { $0.url == selectedURL }) { destinationFolders.append((selectedURL.lastPathComponent, selectedURL)) } selectedFolder = newFolderSelection destinationFolder = selectedURL } else { selectedFolder = .predefined(destinationFolder) } } }
这样修改后,文件选择面板会以表单形式附着在设置窗口上,操作完成后设置视图会保持显示,和Safari等系统应用的交互逻辑一致。
内容的提问来源于stack exchange,提问作者Lorenzo Zorri
相关产品推荐
相关产品推荐

