Swift 中的文档选择器视图控制器问题
Posted
技术标签:
【中文标题】Swift 中的文档选择器视图控制器问题【英文标题】:Document Picker View Controller issue in Swift 【发布时间】:2018-02-07 06:53:27 【问题描述】:我的视图控制器中有一个按钮,当单击一个按钮时,它会打开一个文档选择器视图控制器,我设置了类似 KUTypePDF and KUTypeZipArchive
的类型,当我从谷歌驱动器中选择这些项目中的任何一个时,选择器控制器会被关闭并进入控制台它显示了一个长长的未完成的数字字符串,并且不会停止。我很困惑为什么它显示那么长的字符串。我想要的是,在我从谷歌驱动器中选择任何文件后,它应该显示在我的应用程序中。我得到了正确的文件网址。我的代码是这样的,
@IBAction func docsBtnTapped(_ sender: Any)
let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF),String(kUTTypeZipArchive)], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .fullScreen
self.present(importMenu, animated: true, completion: nil)
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt url: URL)
let cico = url as URL
print("The Url is : /(cico)", cico)
do
let weatherData = try NSData(contentsOf: cico, options: NSData.ReadingOptions())
print(weatherData)
let activityItems = [weatherData]
let activityController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
if UI_USER_INTERFACE_IDIOM() == .phone
self.present (activityController, animated: true, completion:
print("Hello")
)
else
let popup = UIPopoverController(contentViewController: activityController)
popup.present(from: CGRect(x: CGFloat(self.view.frame.size.width / 2), y: CGFloat(self.view.frame.size.height / 4), width: CGFloat(0), height: CGFloat(0)), in: self.view, permittedArrowDirections: .any, animated: true)
catch
print(error)
//optional, case PDF -> render
//displayPDFweb.loadRequest(NSURLRequest(url: cico) as URLRequest)
func documentMenu(_ documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController)
documentPicker.delegate = self
present(documentPicker, animated: true, completion: nil)
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController)
print(" cancelled by user")
dismiss(animated: true, completion: nil)
当我选择 PDF 或 Zip 文件的任何项目时,这个长字符串会出现在控制台中,
【问题讨论】:
"long unfinished strings" 是因为你使用了print(weatherData)
语句。
【参考方案1】:
您可以使用 UIDocumentInteractionController 从 url 打开任何类型的预览:
这是打开网址的简单代码:
var documentController:UIDocumentInteractionController!
@IBAction func btnOpenClicked(_ sender: Any)
if let fileURL = Bundle.main.url(forResource: "icon", withExtension: "jpg")
// Instantiate the interaction controller
self.documentController = UIDocumentInteractionController.init(url: fileURL)
self.documentController.delegate = self
self.documentController.presentPreview(animated: true)
else
print("File missing! Button has been disabled")
func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController
return self
【讨论】:
我想在控制台打开路径。 @Nirmalsinh 你可以在这里给出你的 if let fileURL = Bundle.main.url(forResource: "icon", withExtension: "jpg") 让我试试。 @Nirmalsinh 这是用于预览的兄弟,我想在我的应用程序中获取该文件,以便我可以将其进一步发送到服务器。 @Nirmalsinh 然后你需要下载文件到本地缓存然后你可以上传到你的服务器。以上是关于Swift 中的文档选择器视图控制器问题的主要内容,如果未能解决你的问题,请参考以下文章
点击文本字段时用选择器视图替换键盘(Swift、Storyboard、iOS 9、Xcode 7)