UIActivityViewController:"Add Tags" 动作

UIActivityViewController: "Add Tags" Action

背景

我的应用程序支持使用以下代码导出 CSV 文件(其中 CSVFileActivityItemProvider 是一个 UIActivityItemProvider 子类,它向存储在 FileManager.default.temporaryDirectory 中的 CSV 文件提供 URL) :

func exportCSVFile() {
    let item = CSVFileActivityItemProvider()
    let controller = UIActivityViewController(activityItems: [item], applicationActivities: nil)
    present(controller, animated: true)
}

除了“添加标签”操作(如果安装了 Apple 的“文件”应用程序可以添加?),该代码运行完美。点击时,“添加标签”控制器会出现,然后立即消失。

问题

  1. 如何处理 UIActivityViewController 中的“添加标签”操作?
  2. 当您将文档导出到 TSV 时,我可以排除“添加标签”操作(正如 Apple 在 iOS 上的 Numbers v11.1 中所做的那样)吗?

如何处理 UIActivityViewController 中的“添加标签”操作?

You don't handle it. It's system defined.

我可以排除“添加标签”操作吗(正如 Apple 在 iOS 上的 Numbers v11.1 中所做的那样,当您将文档导出到 TSV 时)?

Looking at these two -

UIActivityViewController.excludedActivityTypes

&

UIAcitivity.activity.type

Pseudocode : It could be as simple as (if you use private APIs).

activityViewController.excludedActivities = [.addTags]

Unfortunately there's no public API for this. So currently there seems to be no way of excluding this with public API.

It's an Objective-C class and you could try inspecting it's instance variables at run time (after presenting & loading) and then try experimenting fixing your issue, however that

  1. will most likely get you an App Store rejection.
  2. will require constant maintenance with each new iOS version.

事实证明,简单地使用 TSV 文件而不是 CSV 文件将自动排除“添加标签”操作(这解释了我在 Numbers 中看到的内容)。这对我来说是一个可行的解决方法。在不需要 TSV 文件的情况下,至少可以通过使用 UIActivityViewController.CompletionWithItemsHandler.

来检测“添加标签”activity