在 AppKit 应用程序的 SwiftUI 中选择文件或目录

mic*_*ica 1 macos appkit swiftui

如何在 SwiftUI 中显示文件对话框来选择目录或文件。

我认为使用 NSViewRepresentable 来包装 NSOpenPanel 是行不通的,因为它需要 NSView 而不是 NSPanel。

还有其他想法、提示或链接吗?我发现的一切都是关于 UIKit 的。

Mac*_*erT 7

import SwiftUI

struct FolderSelector: View {
    
    var body: some View {
        Button("Choose Folder") {
            self.selectFolder()
        }
    }
    
    func selectFolder() {
        
        let folderChooserPoint = CGPoint(x: 0, y: 0)
        let folderChooserSize = CGSize(width: 500, height: 600)
        let folderChooserRectangle = CGRect(origin: folderChooserPoint, size: folderChooserSize)
        let folderPicker = NSOpenPanel(contentRect: folderChooserRectangle, styleMask: .utilityWindow, backing: .buffered, defer: true)
        
        folderPicker.canChooseDirectories = true
        folderPicker.canChooseFiles = true
        folderPicker.allowsMultipleSelection = true
        folderPicker.canDownloadUbiquitousContents = true
        folderPicker.canResolveUbiquitousConflicts = true
        
        folderPicker.begin { response in
            
            if response == .OK {
                let pickedFolders = folderPicker.urls
                
                self.selectedFolder.getFileList(at: pickedFolders)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)