【问题标题】:How to prevent an action extension from appearing in my own iOS app?如何防止操作扩展出现在我自己的 iOS 应用程序中?
【发布时间】:2019-10-22 19:38:46
【问题描述】:

我有一个带有操作扩展的 iOS 应用程序,用于在其他应用程序内的图像呈现 UIActivityViewController 时对其执行操作。一切都按预期工作 - 如果我在另一个应用程序中展示活动表,我的操作扩展会出现在系统操作旁边的列表中(例如保存到文件创建表盘 等等)。

但是,当我在其中的图像上显示UIActivityViewController 时,操作扩展也会出现在我自己的应用程序中,这是我不希望发生的。有什么方法可以防止我自己的操作扩展出现在我自己的应用程序内的UIActivityViewController 中?

我尝试在呈现UIActivityViewController 时向excludedActivityTypes 添加一个条目,如下所示,但这不起作用:

let activity = UIActivityViewController(activityItems: [media], applicationActivities: nil)
activity.excludedActivityTypes = [UIActivity.ActivityType("com.example.ActionExtensionIdentifier")]
// other setup code
present(activity, animated: true)

【问题讨论】:

    标签: ios uiactivityviewcontroller ios-extensions


    【解决方案1】:

    这是我最终使用的解决方案,以防其他人需要。 (代码取自这篇博文:https://pspdfkit.com/blog/2016/hiding-action-share-extensions-in-your-own-apps/,因此也请查看该文章以了解更多详细信息,但我在此处提供的解决方案包含完成这项工作所需的一切。)

    1.首先,创建这个类

    class ActionExtensionBlockerItem: NSObject, UIActivityItemSource {
        func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivity.ActivityType?) -> String {
            return String()
        }
    
        func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
            return NSObject()
        }
    
        func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
            return String()
        }
    
        func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivity.ActivityType?, suggestedSize size: CGSize) -> UIImage? {
            return nil
        }
    
        func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
            return String()
        }
    }
    

    2。应用该类的实例

    当您呈现UIActivityViewController 时,创建ActionExtensionBlockerItem 的实例并将其包含在activityItems 数组中,如下所示:

    func share(_ image: UIImage) {
        let activity = UIActivityViewController(activityItems: [image, ActionExtensionBlockerItem()], applicationActivities: nil)
        activity.popoverPresentationController?.sourceView = view // change to something appropriate for your app
        activity.popoverPresentationController?.sourceRect = view.bounds // change to something appropriate for your app
        present(activity, animated: true)
    }
    

    【讨论】:

    • 不适合我,仍然在活动视图控制器中显示“复制到...”
    • 您是否按照 pspdfkit 链接中的指南进行操作?里面有更多信息。
    猜你喜欢
    • 2018-01-15
    • 2019-10-19
    • 2023-01-14
    • 2014-12-08
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多