IOS開啟Micosoft文件

NO IMAGE

因為從廣州來到了北京,換了工作,所以現在公司要求做的東西跟之前不太一樣。做的一款辦公軟體,這裡面就包括對微軟doc文件,ppt文件,xls文件。Android端的我已經做了一個版本,然後是非常簡單的開啟,沒有編輯功能。現在我要做的就是IOS版本。所有的東西都是自己從0開始的,記錄下來,方便自己,也給後來者一些提示。

Office檔案的IOS-UTI支援

檔案格式UTI type
doccom.microsoft.word.doc
docxorg.openxmlformats.wordprocessingml.document
pptcom.microsoft.powerpoint.ppt
pptxorg.openxmlformats.presentationml.presentation
xlscom.microsoft.excel.xls
xlsxorg.openxmlformats.spreadsheetml.sheet
pdfcom.adobe.pdf

如果需要適配以上的檔案型別,可以直接將下面的程式碼複製到info.plist檔案中的dict標籤中

<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>OFFICE Document</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.microsoft.word.doc</string>
<string>com.microsoft.powerpoint.ppt</string>
<string>com.microsoft.excel.xls</string>
<string>com.adobe.pdf</string>
<string>org.openxmlformats.wordprocessingml.document</string>
<string>org.openxmlformats.presentationml.presentation</string>
<string>org.openxmlformats.spreadsheetml.sheet</string>
<string>org.oasis-open.opendocument.text</string>
</array>
</dict>
</array>

參考網站

開啟檔案

其他的應用(如QQ,微信等)分享過來的檔案,在自己的應用中開啟,這時候有一個跳轉的過程,那麼當跳轉到第二個頁面的時候,我們需要讓他可以以一種開啟新檔案的方式展示
具體實現程式碼
在AppDelegate.swift檔案中,重寫application方法,這裡注意是使用的是

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

全域性程式碼

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
print("檔案路徑是 \(url)")
let vc: DocumentViewController = DocumentViewController(filePath: url)
//跳轉到開啟檔案的頁面
UIViewController.currentViewController()?.navigationController?.pushViewController(vc, animated: true)
return true
}

擴充套件方法

//獲取當期頁面的presentview
extension UIViewController {
class func currentViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let nav = base as? UINavigationController {
return currentViewController(base: nav.visibleViewController)
}
if let tab = base as? UITabBarController {
return currentViewController(base: tab.selectedViewController)
}
if let presented = base?.presentedViewController {
return currentViewController(base: presented)
}
return base
}
}