UIDocumentPickerViewController和UIDocumentInteractionController


UIDocumentPickerViewController和UIDocumentInteractionController

UIDocumentPickerViewController

補充一下,UIDocumentPickerModeOpen有點像readonly的模式,可以獲取到NSURL,但是NSData無法通過NSURL獲取真實的數據,建議優先使用UIDocumentPickerModeImport

重點要了解UIDocumentPickerViewController在初始化的時候inMode的四種模式:

  1. UIDocumentPickerModeImport: Import從提供者那里獲得文件並拷貝到我們的host app。最經典的應用場景是在內容創建類應用中的使用。例如,像keynote、PowerPoint這樣的演示制作應用,希望導入圖片,視頻,以及音頻。它們希望拷貝一份這些數據以此保證它們隨時可用。
  2. UIDocumentPickerModeOpen: 和import一樣,open同樣從文件提供者那里獲得數據並導入我們的host app,只是不同的是,這些數據沒有被拷貝一份至我們的host app,數據還在原處。例如,你或許在音樂播放器、視頻播放器,再或者圖像編輯器中使用該方式。
  3. UIDocumentPickerModeExportToService: Export使我們的host app可以保存文件至其它提供者。例如,這些提供者可能是常用的像Dropbox、iCloud Drive這樣的雲存儲系統。host app可以通過export保存文件到提供者的存儲空間。在接下來的編輯器例子中,當用戶完成編輯,他們可以導出文件,然后稍后可以在其它app中打開這些文件。
  4. UIDocumentPickerModeMoveToService: 除了host app不會持有一份兒文件的拷貝,其它Moving和export差不多。這或許是最不常用的操作,因為大多數iOS apps不是為了拋棄它們的數據才創建的。

UIDocumentInteractionController

這個類相對簡單一點,重點是要實現在delegate里面的3個方法, 這樣視圖控制器才能顯示出來:

#pragma mark - UIDocumentInteractionControllerDelegate
-(UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller{
    return self;
}
-(UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller{
    return self.view;
}
-(CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller{
    return self.view.bounds;
}

UTI

蘋果支持的文件類型使用UTI標識

Apple 文檔:https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html

在info.plist上配置app里面支持讀取查看支持的文件類型

<key>CFBundleDocumentTypes</key>
	<array>
		<dict>
			<key>CFBundleTypeIconFiles</key>
			<array/>
			<key>CFBundleTypeName</key>
			<string>com.myApp.surpportFiles</string>
			<key>LSItemContentTypes</key>
			<array>
				<string>public.image</string>
				<string>public.audio</string>
				<string>public.movie</string>
				<string>public.data</string>
				<string>public.text</string>
				<string>public.archive</string>
				<string>public.item</string>
				<string>public.source-code</string>
			</array>
		</dict>
	</array>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM