据此:
https://developer.apple.com/documentation/uikit/view_controllers/providing_access_to_directories
iOS 13增加了UIDocumentPickerViewController选择目录的功能,包括来自第三方文件提供者的目录。
在ViewController中单击按钮时,调用以下函数“ showPickerView”
我们正在使用下面的代码段,通过减轻干扰的电缆访问外部USB驱动器
func showPickerView() {
let url = URL(string: "/some_path_here/NO%20NAME/DCIM")!
let documentPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeFolder as String], in: .open)
documentPicker.delegate = self
documentPicker.allowsMultipleSelection = false
documentPicker.directoryURL = url
documentPicker.modalPresentationStyle = .custom
documentPicker.definesPresentationContext = true
documentPicker.transitioningDelegate = customTransitioningDelegate
self.present(documentPicker, animated: true, completion: nil)
}
一旦在弹出窗口下方调用此函数,
用户将单击“完成”标签,这将调用以下代码。
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let url = urls.first else {
return
}
print(url)
//Access using security-scoped resource
}
我们的目标:直接从外置驱动器(我们已经知道的外置驱动器路径)访问文件,而不是显示文档选择器的弹出窗口并单击“完成”按钮。
原因:对于最终用户而言,此弹出窗口很烦人。
我们尝试过的选项
显示文档选择器,但会自动将其关闭。
获取右上角“完成”按钮的对象-执行buttonObj.sendActions(for:.touchUpInside) 以编程方式,提供一些手势/快捷方式,一旦打开此弹出窗口,便可以播放
当前上述任何选项均无效。
如果有其他建议的方法可以解决此问题,请告诉我们。
答案 0 :(得分:0)
我认为通过这种欺骗用户的行为,很容易被App Store拒绝。 这是关于安全范围的。
尝试设置documentPicker.directoryURL
,以便选择器开始突出显示您已经知道的路径。
此处有更多信息:https://developer.apple.com/documentation/uikit/view_controllers/providing_access_to_directories
如果指定directoryURL属性,则文档选择器将从所选目录开始。否则,它将从用户选择的最后一个目录开始。
答案 1 :(得分:0)
您也可以通常只显示一次提示,然后将结果保存在安全范围内的书签中:https://developer.apple.com/library/archive/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16
在以后的实例中,您可以从书签中还原URL,而无需再次显示弹出窗口。