c00*_*0fd 4 macos nsopenpanel swift swiftui
我正在尝试显示使用 SwiftUI 编写的 macOS GUI 应用程序中的文件选择器窗口。所以我称之为:
let panel = NSOpenPanel()
//panel.allowedFileTypes = ["myext"] //I get a warning here that it's deprecated
//Trying to use the following instead:
let fileType = UTType(tag: "myext", tagClass: .filenameExtension, conformingTo: nil)
if(fileType != nil)
{
panel.allowedContentTypes = [fileType!]
}
else
{
assert(false)
}
panel.allowsMultipleSelection = false
panel.canChooseDirectories = false
panel.canChooseFiles = true
let resp = panel.runModal()
Run Code Online (Sandbox Code Playgroud)
面板已显示,但我无法选择任何文件,包括带有我的.myext扩展名的文件。
但如果我取消注释panel.allowedFileTypes行,一切都会按我的预期进行。
那么我做错了什么allowedContentTypes?
附言。或者,至少如何在 Swift 中消除该已弃用的警告?(allowedFileTypes效果很好,弃用它有什么意义!)
如果是您自己的扩展,请添加 \xe2\x80\x9cexported 类型标识符\xe2\x80\x9d。如果是其他应用定义的类型,请添加\xe2\x80\x9c导入的类型标识符\xe2\x80\x9d。
\n我们可以在目标设置的 \xe2\x80\x9cInfo\xe2\x80\x9d 选项卡中定义类型标识符。这将Info.plist相应地创建/更新。例如,如果它是导出的标识符:
请记下 \xe2\x80\x9cidentifier\xe2\x80\x9d、关联的 \xe2\x80\x9cextensions\xe2\x80\x9d 以及 \xe2\x80\x9cconforms to\xe2\x80\x9d 设置。
\n完成此操作后,我们现在可以在代码中使用该标识符。因为此示例是 \xe2\x80\x9cExported Type Identifier\xe2\x80\x9d,所以我们将使用UTType(exportedAs:):
extension UTType {\n public static let foo = UTType(exportedAs: "com.domain.foo")\n}\nRun Code Online (Sandbox Code Playgroud)\n进而:
\nlet panel = NSOpenPanel()\n\npanel.allowedContentTypes = [.foo]\npanel.allowsMultipleSelection = false\npanel.canChooseDirectories = false\npanel.canChooseFiles = true\n\nlet response = panel.runModal()\nRun Code Online (Sandbox Code Playgroud)\n\n有关详细信息,请参阅 Apple \xe2\x80\x9cTech Talk\xe2\x80\x9d 视频、统一类型标识符 \xe2\x80\x94 重新介绍。
\n| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |