【发布时间】:2019-05-03 00:45:07
【问题描述】:
我有以下ViewController,它实现了使用UIDocumentPickerViewController 将文件导入应用程序的功能:
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
func importFromFiles(origin: UIViewController?) {
let documentPicker = UIDocumentPickerViewController(documentTypes: [kUTTypeContent as String], in: .import)
documentPicker.delegate = self
documentPicker.allowsMultipleSelection = true
origin?.present(documentPicker, animated: true, completion: nil)
}
}
如您所见,importFromFiles 方法接收到一个ViewController,它只是活动的 VC。这个方法是从AppDelegate调用的。
目前,documentPicker 方法如下所示:
extension MyViewController: UIDocumentPickerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
print("Files picked")
}
}
选择器正确显示和关闭,但委托从未被调用,因此print 从未执行。
编辑 1
对importFromFiles 方法的调用发生在AppDelegate 内部。更具体地说,它发生在为 SwiftTweaks 调整定义闭包时:
MyTweaks.importFromFiles.addClosure {
let topViewController = visibleViewController(root: self.window?.rootViewController)
let myVC: MyViewController = MyViewController()
myVC.importFromFiles(origin: topViewController)
}
【问题讨论】:
-
为什么要创建
MyViewController的新实例只是为了显示文档选择器?您不应该在视图控制器的现有可见实例上调用importFromFiles吗?
标签: ios swift delegates uidocumentpickerviewcontroller