UIImagePickerController()
と同様の方法でiCloudドライブからファイルを選択する方法はありますか?
コントローラは次の方法で提示できます。
let documentPickerController = UIDocumentPickerViewController(documentTypes: [String(kUTTypePDF), String(kUTTypeImage), String(kUTTypeMovie), String(kUTTypeVideo), String(kUTTypePlainText), String(kUTTypeMP3)], inMode: .Import)
documentPickerController.delegate = self
presentViewController(documentPickerController, animated: true, completion: nil)
デリゲートでメソッドを実装します。
func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL)
UIDocumentPickerViewController
を使用するためにiCloudエンタイトルメントを設定する必要はないことに注意してください。 Appleは、このコントローラーの使用方法を示すサンプルコードを提供します ここ
Swift 4.X
XCode機能でiCloud
資格を有効にする必要があります。また、Appleの開発者アカウントのアプリバンドルでiCloud
をオンにする必要があります。これを行うと、次の方法でドキュメントピッカーコントローラーを提示できます。
UIDocumentPickerDelegate
メソッドを使用する
extension YourViewController : UIDocumentMenuDelegate, UIDocumentPickerDelegate,UINavigationControllerDelegate {
func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) {
documentPicker.delegate = self
self.present(documentPicker, animated: true, completion: nil)
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) {
print("url = \(url)")
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
dismiss(animated: true, completion: nil)
}
}
ボタンアクションの以下のコードを追加します
@IBAction func didPressAttachment(_ sender: UIButton) {
let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
if let popoverPresentationController = importMenu.popoverPresentationController {
popoverPresentationController.sourceView = sender
// popoverPresentationController.sourceRect = sender.bounds
}
self.present(importMenu, animated: true, completion: nil)
}
これは私にとってはうまく機能しています。それがあなたにも役立つことを願っています。
ハッピーコーディング:)
ドキュメントピッカーは、ユーザーがアプリのサンドボックス外の宛先を選択すると、デリゲートのdocumentPicker:didPickDocumentAtURL:メソッドを呼び出します。システムはドキュメントのコピーを指定された宛先に保存します。ドキュメントピッカーは、成功を示すためにコピーのURLを提供します。ただし、アプリはこのURLで参照されているファイルにアクセスできません。 リンク
このコードは私のために働きます:
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
let url = urls[0]
let isSecuredURL = url.startAccessingSecurityScopedResource() == true
let coordinator = NSFileCoordinator()
var error: NSError? = nil
coordinator.coordinate(readingItemAt: url, options: [], error: &error) { (url) -> Void in
_ = urls.compactMap { (url: URL) -> URL? in
// Create file URL to temporary folder
var tempURL = URL(fileURLWithPath: NSTemporaryDirectory())
// Apend filename (name+extension) to URL
tempURL.appendPathComponent(url.lastPathComponent)
do {
// If file with same name exists remove it (replace file with new one)
if FileManager.default.fileExists(atPath: tempURL.path) {
try FileManager.default.removeItem(atPath: tempURL.path)
}
// Move file from app_id-Inbox to tmp/filename
try FileManager.default.moveItem(atPath: url.path, toPath: tempURL.path)
YourFunction(tempURL)
return tempURL
} catch {
print(error.localizedDescription)
return nil
}
}
}
if (isSecuredURL) {
url.stopAccessingSecurityScopedResource()
}
navigationController?.dismiss(animated: true, completion: nil)
}