在swift中实现文档选择器(iOS)
我想在我的iOS应用程序中选择任何类型的文件(.pdf,.docs,.xlsx,.jpeg,.txt,.rtf等)。 点击上传按钮,我希望我的应用程序打开一个目录并选择文件( DocumentsPicker
)
@IBAction pickDocument(sender: UIButton) { //Open Document Picker }
在Swift
这样做的任何方法?
根据项目的function,启用iCloud
和Key-Sharing
。
在您的类中导入MobileCoreServices
,最后在UIViewController中扩展以下三个类:
UIDocumentMenuDelegate,UIDocumentPickerDelegate,UINavigationControllerDelegate
实现以下function:
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL) { let myURL = url as URL 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) }
怎么称呼这一切? 将以下位代码添加到您的单击function中..
func clickFunction(){ let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import) importMenu.delegate = self importMenu.modalPresentationStyle = .formSheet self.present(importMenu, animated: true, completion: nil) }
单击您的按钮。 将弹出以下菜单..
在DropBox的情况下。 点击任何项目。 您将被重定向回您的应用程序,URL将记录在您的终端中。
根据需要操作documentTypes。 在我的应用程序中,用户只允许使用Pdf。 所以,适合自己。
kUTTypePDF
kUTTypePNG
kUTTypeJPEG
…
此外,如果您想要自定义自己的菜单栏。 添加以下代码并在处理程序中自定义您自己的函数
importMenu.addOption(withTitle: "Create New Document", image: nil, order: .first, handler: { print("New Doc Requested") })
好好享受。
您可以使用UIDocumentPickerViewController
从Files apps或iCloud Drive中获取文件。
- 从
iCloud
function激活Key-value storage
和iCloud Documents
:
-
在要打开文档选择器的视图控制器上导入以下框架:
import MobileCoreServices
-
从
UIDocumentPickerDelegate
实现以下方法:func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { // you get from the urls parameter the urls from the files selected }
-
创建一个
UIDocumentPickerViewController
以显示FileUIDocumentPickerViewController
或iCloud Drive:let types: NSArray = NSArray(object: kUTTypePDF as NSString) let documentPicker = UIDocumentPickerViewController(documentTypes: types as! [String], in: .import) documentPicker.delegate = self documentPicker.modalPresentationStyle = .formSheet self.present(documentPicker, animated: true, completion: nil)
如果您希望用户可以向您的应用程序导入更多类型的文件,则必须向
NSArray
types
添加更多UTType
。 要查看所有可用类型,您可以查看UTType文档
当文档选择器在iOS 11上打开并且您尝试在Google云端硬盘中选择一个文件时,由于存在错误,该文件可能会被禁用: http : //www.openradar.me/24187873
您可以使用NSURLSession
实现您描述的NSURLSession
。
您必须将显示的目标目录限制在应用程序的文档目录中。 应用程序无法完全访问文件系统。
这将有助于您实现下载/上传function
UIDocumentMenuViewController *importMenu = [[UIDocumentMenuViewController alloc] initWithDocumentTypes:@[@"public.item"] inMode:UIDocumentPickerModeImport | UIDocumentPickerModeExportToService];
有关更多阅读Apple文档