iOS UIDocumentInteractionController

基础操作

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
  • Document Type Name :类型名

  • Document Content Type Identifiers :所关联的uti格式,一个类型名可以对应多个uti,更多查看 https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html

  • Handler rank :是不是app所拥有的类型,Default:不是,Owner:是

Info.plist 文件的 Source Code 格式:

CFBundleDocumentTypes

    
        CFBundleTypeName
        fileName
        CFBundleTypeIconFiles
        
            image.png
        
        LSItemContentTypes
        
            public.mp3
            public.mpeg-4
            com.adobe.pdf
            public.jpeg
        
        LSHandlerRank
        Owner
    

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

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

image.png

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

func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {
    
    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)
    
    // 
    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

你可能感兴趣的:(iOS UIDocumentInteractionController)