1

我在 Swift 中构建了一个 iOS 应用程序,并且正在为 macOS Catalyst 添加一些功能。

在我的应用程序中,我在单击按钮时创建了一个 .txt 文件。我想提出一个UIDocumentPickerViewController允许用户指定保存目录和文件名的方法。到目前为止,我只能显示UIDocumentPickerViewController没有命名文件或保存的选项。是UIDocumentPickerViewController正确的视图控制器来完成这个吗?如果是这样,我如何指定保存目录和文件名?

这是我用来展示的代码UIDocumentPickerViewController

#if targetEnvironment(macCatalyst)
            
            let str = "Hello boxcutter"
            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] as NSURL
            let fileURL = documentsURL.appendingPathComponent("boxCutter.txt")
            try! str.write(to: fileURL!, atomically: true, encoding: String.Encoding.utf8)
            
            let types: [String] = [kUTTypeFolder as String]
            let documentPicker = UIDocumentPickerViewController(documentTypes: types, in: .open)
            documentPicker.delegate = self
            documentPicker.allowsMultipleSelection = false
            documentPicker.modalPresentationStyle = .formSheet
            self.present(documentPicker, animated: true, completion: nil)

#endif
4

1 回答 1

0

您可以使用NSSavePanel询问用户将文件保存在哪里。这是一个无法从 Catalyst 应用程序直接访问的 macOS API,但您可以创建一个可以访问 macOS API 的 macOS 插件,如此所述。或者使用Dynamic之类的库 (完全披露:我是作者)在没有插件的情况下实现相同的目标:

let nsWindow = Dynamic.NSApplication.sharedApplication.delegate.hostWindowForUIWindow(view.window)

let panel = Dynamic.NSSavePanel()
panel.nameFieldStringValue = "boxCutter.txt"
panel.beginSheetModalForWindow(nsWindow, completionHandler: { response in
    if response == 1 /*OK*/ {
        print("file URL: ", panel.URL.asURL)
    }
} as ResponseBlock)

typealias ResponseBlock = @convention(block) (_ response: Int) -> Void
于 2020-08-08T10:12:07.577 回答