【问题标题】:How to identify & exclude 3rd-party ActivityType (e.g. 'Send to Kindle', 'Chrome') in a UIActivityViewController?如何在 UIActivityViewController 中识别和排除第 3 方 ActivityType(例如“发送到 Kindle”、“Chrome”)?
【发布时间】:2019-05-17 17:32:04
【问题描述】:

正如here 和here 所讨论的,除了预定义的那些之外,还可以使用UIActivityViewController 的excludedActivityTypes 排除其他ActivityType 选项。

但是,如何找出任何给定 ActivityType 的标识符(如果可能,最好在构建/运行时以编程方式),然后可以将它们排除在外?

例如,我希望禁用 Send to Kindle 和 Chrome。

【问题讨论】:

    标签: ios swift uiactivityviewcontroller


    【解决方案1】:

    要找出第三方活动的ActivityType,请在显示您的UIActivityViewController 后选择该活动。

    当调用完成处理程序时,您提供给活动控制器的完成闭包/块有一个类型为ActivityType 的参数,告诉您选择了哪个。

    例如:

    activityVC.completionWithItemsHandler = { activity, success, items, error in
        print("activity: \(activity), success: \(success), items: \(items), error: \(error)")
    }
    

    现在您知道该活动的 ActivityType。更新您的代码以将该值添加到您传递给excludedActivityTypes 的列表中。

    【讨论】:

    • 谢谢!我花了一段时间才弄清楚如何做到这一点,所以我用一些示例代码编辑了你的答案。我还将编辑问题,以便更专注于获取任何活动的标识符。希望您能通过这种方式获得更多选票。
    • 不幸的是,即使我从这个方法中得到了确切的标识符,它们仍然没有被排除在外。知道为什么这不起作用吗? let kindleActivity = UIActivity.ActivityType(rawValue: "com.amazon.Lassen.SendToKindleExtension"); let chromeActivity = UIActivity.ActivityType(rawValue: "com.google.chrome.ios.ShareExtension"); activityVC.excludedActivityTypes = [kindleActivity, chromeActivity]
    • 不幸的是,UIActivityViewController 似乎并不支持您尝试排除的每种活动类型。我过去遇到过这个问题,我确信我也发布过类似的问题。这几乎就像您只能排除具有为 ActivityType 列出的常量的活动。
    • 那真是太可惜了。似乎并非没有常数,因为我确实设法排除了 UIActivity.ActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension") 和 UIActivity.ActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"),它们似乎没有自己的,但它们也是 iOS 原生活动,所以这可能就是原因他们工作了。
    【解决方案2】:

    仅供参考,由 @rmaddy 的出色回答确定,如果有人感兴趣,这些是 Send to Kindle 和 Chrome 的特定标识符:

    let kindleActivity = UIActivity.ActivityType(rawValue: "com.amazon.Lassen.SendToKindleExtension")
    let chromeActivity = UIActivity.ActivityType(rawValue: "com.google.chrome.ios.ShareExtension")
    

    this answer to a related question 中已经定义了许多其他示例。

    不幸的是,即使将这些添加到excludedActivityTypes 的数组中,它们似乎仍然出现在UIActivityViewController 中。非常欢迎任何关于为什么以及如何解决此问题的意见!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多