【问题标题】:How to open file dialog with SwiftUI on platform "UIKit for Mac"?如何在“UIKit for Mac”平台上使用 SwiftUI 打开文件对话框?
【发布时间】:2019-10-31 21:41:25
【问题描述】:

NSOpenPanel 在“UIKit for Mac”平台上不可用: https://developer.apple.com/documentation/appkit/nsopenpanel

如果 Apple 不提供内置方式,我猜有人会基于 SwiftUI 和 FileManager 创建一个库,显示选择文件的对话框。

【问题讨论】:

    标签: swift macos swiftui mac-catalyst uikitformac


    【解决方案1】:

    这是使用 Catalyst 和 UIKit 为 macOS 选择文件的解决方案

    在您的 swiftUI 视图中:

    Button("Choose file") {
        let picker = DocumentPickerViewController(
            supportedTypes: ["log"], 
            onPick: { url in
                print("url : \(url)")
            }, 
            onDismiss: {
                print("dismiss")
            }
        )
        UIApplication.shared.windows.first?.rootViewController?.present(picker, animated: true)
    }
    

    DocumentPickerViewController 类:

    class DocumentPickerViewController: UIDocumentPickerViewController {
        private let onDismiss: () -> Void
        private let onPick: (URL) -> ()
    
        init(supportedTypes: [String], onPick: @escaping (URL) -> Void, onDismiss: @escaping () -> Void) {
            self.onDismiss = onDismiss
            self.onPick = onPick
    
            super.init(documentTypes: supportedTypes, in: .open)
    
            allowsMultipleSelection = false
            delegate = self
        }
    
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }
    
    extension DocumentPickerViewController: UIDocumentPickerDelegate {
        func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
            onPick(urls.first!)
        }
    
        func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
            onDismiss()
        }
    }
    

    【讨论】:

    • 优秀的解决方案。我一直在寻找一个有一段时间没有成功。恭喜。
    【解决方案2】:

    UIDocumentPickerViewControllerUIDocumentBrowserViewController 都在 Catalyst 中工作。就像在 iOS 上一样使用它们,它们会“神奇地”显示为标准的 Mac 打开/保存对话框。

    如果您需要,这里有一个很好的例子:https://appventure.me/guides/catalyst/how/open_save_export_import.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      相关资源
      最近更新 更多