• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - iOS 未调用 UIDocumentPickerDelegate 方法(didPickDocumentsAt)

[复制链接]
菜鸟教程小白 发表于 2022-12-11 21:47:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个关于没有为 DocumentPickerViewController 调用委托(delegate)方法的查询,这是背景,我只需要从我的文件应用程序中导入任何可用的资源,因此我正在使用 UIDocumentPickerViewController。

我有一个单独的 ViewController,我将 documentPickerViewController 的 View 添加为 subview 并添加它的委托(delegate)。我的 ViewController 的代码是这样的。

var documentPickerController: UIDocumentPickerViewController!
  let supportedUTI = [kUTTypeImage,kUTTypeSpreadsheet,kUTTypePresentation,kUTTypeDatabase,kUTTypeFolder,kUTTypeZipArchive,kUTTypeVideo, kUTTypeAudiovisualContent]

documentPickerController = UIDocumentPickerViewController.init(documentTypes: supportedUTI as [String], in: .import)
    documentPickerController.delegate = self
    documentPickerController.allowsMultipleSelection = false
    view.addSubview(documentPickerController.view)

现在我看到pickercontroller 已打开,当我点击取消时 documentPickerWasCancelled 被调用,但是当我选择文件时 documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL] 没有被调用。

如果我像这样直接显示pickerViewController

UIDocumentPickerViewController *dc = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:[self UTITypes] inMode:UIDocumentPickerModeImport];
    dc.delegate = self;
    [MainVC presentViewController:dc animated:YES completion:nil];

这两个委托(delegate)方法都被调用得很好。我不明白为什么。有人可以在这里帮我吗!提前致谢!!



Best Answer-推荐答案


所以我遇到了完全相同的问题,调用了 documentPickerWasCancelled 委托(delegate)方法,但不会调用 didPickDocumentsAt

另外值得注意的是,当我将所有委托(delegate)/演示逻辑移到我的基本 View Controller 中时,UIPickerDelegate 方法按预期工作。这让我知道没有任何配置类型问题阻止功能。

我不确定问题出在哪里,但似乎如果文档选择器出现在复杂的 View 层次结构上,就会出现问题。

我最终解决此问题的方法是创建一个新窗口并在那里显示文档选择器:

func showDocumentPicker() {

        let documentTypes = ["public.image", "com.adobe.pdf"]

        let picker = UIDocumentPickerViewController(documentTypes: documentTypes, in: .import)
        picker.delegate = self
        picker.allowsMultipleSelection = true
        picker.modalPresentationStyle = .formSheet

        let window = UIWindow(frame: UIScreen.main.bounds)
        let newWindowBaseVC = UIViewController()
        newWindowBaseVC.view.backgroundColor = UIColor.clear
        window.rootViewController = newWindowBaseVC
        window.windowLevel = UIWindow.Level.alert
        window.makeKeyAndVisible()
        newWindowBaseVC.present(picker, animated: false, completion: nil)
    }

关于ios - iOS 未调用 UIDocumentPickerDelegate 方法(didPickDocumentsAt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54234901/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap