日常收录

iOS UIDocumentInteractionControl

2020-11-02  本文已影响0人  gaookey

基础操作

let document = UIDocumentInteractionController()
// UIDocumentInteractionControllerDelegate
document.delegate = self

//音乐
let path = Bundle.main.path(forResource: "music", ofType: "mp3")
//视频
//let path = Bundle.main.path(forResource: "video", ofType: "mp4")
//文件
//let path = Bundle.main.path(forResource: "file", ofType: "pdf")
//图片
//let path = Bundle.main.path(forResource: "image", ofType: "jpg")

document.url = URL(fileURLWithPath: path!)
//预览。需要实现代理 `documentInteractionControllerViewControllerForPreview` 方法
document.presentPreview(animated: true)
func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
    return self
} 

预览打开的文件样式

image.png

点击预览页面中的分享按钮弹出此页面

image.png

打开第三方App里面的文档

如果我们需要打开第三方app分享过来的文档时,需要在 Info.plist 中添加如下内容:

image.png

Info.plist 文件的 Source Code 格式:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>fileName</string>
        <key>CFBundleTypeIconFiles</key>
        <array>
            <string>image.png</string>
        </array>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.mp3</string>
            <string>public.mpeg-4</string>
            <string>com.adobe.pdf</string>
            <string>public.jpeg</string>
        </array>
        <key>LSHandlerRank</key>
        <string>Owner</string>
    </dict>
</array>

新建 test 工程,在 Info.plist 文件中添加以上内容,那么在第三方打开文件时,列表中就会出现 test 工程app

即:在自己的项目中添加了 Info.plist 文件中的内容以后,那么其它应用程序中的文档在使用第三方打开的时候,就可以看到自己的项目了。

image.png

test 工程的 SceneDelegate.swift 文件中添加如下代码:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    
    guard let context = URLContexts.first else { return }
    
    // file:///Users/swiftprimer/Library/Developer/CoreSimulator/Devices/9EE0F225-F3CF-4B8C-BC55-333CBFF41CEB/data/Containers/Data/Application/BB257E41-BE96-4F13-A71A-0DDAC99A9871/Documents/Inbox/music.mp3
    print(context.url)
    
    // <UISceneOpenURLOptions: 0x6000016ce100; sourceApp: (null); annotation: (null); openInPlace: NO>
    print(context.options)
}

如果不存在 SceneDelegate.swift 则使用 AppDelegate.swift 的方法

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    
    print(url)

    return true
}

当第三方app使用 test app打开文档时,就会调用以上方法,其中 url 就是该文档的位置,打开的文档都会存在 /Documents/Inbox/ 目录下

image.png

每次执行此操作,都会复制一份到 /Documents/Inbox/ 目录下,相同的文件也不会替换原来文件,所以记得移动文档到合适的位置,并删除掉 /Documents/Inbox/ 目录下的原文件。

image.png
上一篇下一篇

猜你喜欢

热点阅读