在基于UIDocumentBrowserViewController的应用程序中打开多个文档

时间:2018-06-20 17:51:55

标签: ios mdi document-based

Apple的文档只涉及基于UIDocumentBrowserViewController的应用程序,这些应用程序希望支持同时打开多个文档。

我想启用此功能,以便用户可以轻松地在两个或多个文档之间复制/粘贴,而不必退出到文档浏览器,这在iOS上并不是一种流畅的体验。

除了对allowsPickingMultipleItems属性的简短描述之外,我什么也找不到。

对于单个文档视图,Apple建议使用模式视图,但不赘述。

问题

  1. 建议使用什么(如果有的话)来实现多个打开文档的体验和UI?
  2. 用户是否可以打开一组文档,然后在保持现有文档打开状态的同时打开另一个文档?
  3. 有没有实现这种体验的应用程序?

1 个答案:

答案 0 :(得分:2)

我是一个相对较新的iOS开发人员,因此请耐心等待。

以下对我有用:

  1. 将allowPickingMultipleItems设置为true
  2. 创建一个ViewController,它可以接受URL的输入,而另一个可以接受[URL]的输入。然后,这些ViewController必须在屏幕上显示与URL相关的文档。
    • 可以处理一个或多个文档的单个ViewController也可以工作。
  3. documentBrowser(_:, didPickDocumentURLs:)中,检查传入了多少URL,并显示上述ViewController之一(视情况而定)

示例:

class DocumentBrowserViewController: UIDocumentBrowserViewController, UIDocumentBrowserViewControllerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()
    delegate = self
    allowsDocumentCreation = false
    allowsPickingMultipleItems = true

    // -snip-

}

// MARK: UIDocumentBrowserViewControllerDelegate

// -snip-

func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL]) {
    if documentURLs.count < 1 {
        return
    } else if documentURLs.count == 1 {
        presentDocument(at: documentURLs[0])
    } else {
        presentDocuments(at: documentURLs)
    }
}

// -snip-

// MARK: Document Presentation

func presentDocument(at documentURL: URL) {
    // present one document

    // example:
    // let vc = SingleDocumentViewController()
    // vc.documentURL = documentURL
    // present(vc, animated: true, completion: nil)
}
func presentDocuments(at documentURLs: [URL] {
    // present multiple documents

    // example:
    // let vc = MultipleDocumentViewController()
    // vc.documentURLs = documentURLs
    // present(vc, animated: true, completion: nil)
}
}

要回答您的其他问题:

  1. 我不确定如何建议实现此功能
  2. 我认为打开一个文档,然后再打开另一个文档可能更适合UIDocumentPickerViewController
  3. 我不知道有任何实现此多文档体验的应用程序。但是,通过反复试验,我确实知道文档浏览器的外观与通常情况相同,但是右上角有一个“选择”按钮。按下此键后,用户可以选择要打开的文档和文件夹,或“全选”。

一些警告:

  • 如果选择了文件夹,并且该文件夹不在应用程序自己的目录中,则不会授予该应用程序对该文件夹内文档的访问权限。

注意: documentBrowser(_:, didPickDocumentURLs:)将重命名为documentBrowser(_: didPickDocumentsAt:) in iOS 12