ios - 在 UIDocumentPickerViewController 中显示自定义 UTI 的图标

标签 ios xcode ios8 uti

我正在开发的 iOS 应用导出 UTI。 Info.plist 的相关部分如下所示:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.xml</string>
            <string>public.data</string>
        </array>
        <key>UTTypeDescription</key>
        <string>GPX Document</string>
        <key>UTTypeIdentifier</key>
        <string>de.company.app.gpx</string>
        <key>UTTypeSize320IconFile</key>
        <string>Doc320.png</string>
        <key>UTTypeSize64IconFile</key>
        <string>Doc64.png</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>gpx</string>
            </array>
        </dict>
    </dict>
</array>

我希望应用程序通过“打开方式...”对话框处理 GPX 文件,因此在同一个 PLIST 中还有一个文档类型定义(引用 UTI):

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>Icon29.png</string>
            <string>Icon58.png</string>
        </array>
        <key>CFBundleTypeName</key>
        <string>de.company.app.gpx</string>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>de.company.app.gpx</string>
        </array>
    </dict>
</array>

在 Safari 中打开 GPX 文件时,它会显示我在 CFBundleTypeIconFiles 下指定的图标,即在视网膜设备上显示 Icon58.png。该应用程序还允许通过 iOS 8 中引入的 UIDocumentPickerViewController 类进行导入,虽然 UTI 定义可以很好地过滤 iCloud Drive 中的相关文件,但它不会显示我指定的任何艺术品:

我已确保所有引用的图像文件(Icon29.pngIcon58.pngDoc64.pngDoc320。 png) 确实在应用程序包的根目录中。它们名称中的数字表示它们的高度(以像素为单位)。 Doc... 文件是方 block ,另外两个跟在 this specification 后面(仅限 iPhone)。

我基本上有两个问题:

1) 如何让 UIDocumentPickerViewController 为我们的 UTI 显示自定义图标?

2) 是否还有使用 UTTypeSize64IconFileUTTypeSize320IconFile 的其他用例?

最佳答案

不幸的是,答案是除非您的应用程序可以控制这些文件写入磁盘的方式,否则无法完成。在这种情况下,您可以子类化 UIDocument 并写出缩略图。 Here是 Apple 工程师发布的原始答案,发布在 Apple 开发者论坛上(需要登录)。它包括一个代码示例来说明它是如何完成的。

我还没有找到问题第二部分的答案。

关于ios - 在 UIDocumentPickerViewController 中显示自定义 UTI 的图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626254/

相关文章:

ios - 为什么在我添加自动布局约束时我的 textview 不显示?

ios - 从 UIViewController 访问静态行

ios - UIScrollView 里面的 UIVIew 弹回来

iOS UI 测试与集成测试

swift - 端口扬声器的未知选定数据源(类型 : Speaker)?

ios - 如何在 IOS 8 Autolayout 中安装/复制大小类的所有约束到另一个

ios - iOS 不同设备的导航栏颜色略有不同

ios - 隐藏导航栏 ios swift 生命周期方法未调用导致问题

ios - ios 中 UITextField 的自动布局问题

icloud - 在 iOS 8 中将应用程序的无处不在的容器暴露给 iCloud Drive