iOS 14 の更新: 機能は必要ありません。適切な型で を作成しUIDocumentPickerViewController
、デリゲートを実装するだけで完了です。
詳細については、この回答を参照してください。そこからコード:
import UIKit
import MobileCoreServices
import UniformTypeIdentifiers
func selectFiles() {
let types = UTType.types(tag: "json",
tagClass: UTTagClass.filenameExtension,
conformingTo: nil)
let documentPickerController = UIDocumentPickerViewController(
forOpeningContentTypes: types)
documentPickerController.delegate = self
self.present(documentPickerController, animated: true, completion: nil)
}
プロジェクトの機能から、iCloud
と の両方を有効にしKey-Sharing
ます。
クラスにインポートMobileCoreServices
してから、次の 3 つのクラスを 内で拡張しますUIViewController
。
UIDocumentMenuDelegate,UIDocumentPickerDelegate,UINavigationControllerDelegate
次の機能を実装します。
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let myURL = urls.first else {
return
}
print("import result : \(myURL)")
}
public func documentMenu(_ documentMenu:UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) {
documentPicker.delegate = self
present(documentPicker, animated: true, completion: nil)
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("view was cancelled")
dismiss(animated: true, completion: nil)
}
これらすべてをどのように呼びますか?クリック関数に次のコードを追加します。
func clickFunction(){
let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
self.present(importMenu, animated: true, completion: nil)
}
ボタンをクリックします。次のメニューがポップアップします。
ドロップボックスの場合。任意の項目をクリックすると。アプリにリダイレクトされ、URL が端末に記録されます。
必要に応じて documentTypes を操作します。私のアプリでは、ユーザーは Pdf のみを許可されています。だから、自分に合わせてください。
kUTTypePDF
kUTTypePNG
kUTTypeJPEG
...
また、独自のメニュー バーをカスタマイズしたい場合も。次のコードを追加し、ハンドラー内で独自の関数をカスタマイズします
importMenu.addOption(withTitle: "Create New Document", image: nil, order: .first, handler: { print("New Doc Requested") })
楽しめ。