簡體   English   中英

如何防止操作擴展出現在我自己的 iOS 應用程序中?

[英]How to prevent an action extension from appearing in my own iOS app?

我有一個帶有動作擴展的 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)

這是我最終使用的解決方案,以防其他人需要。 (代碼取自這篇博文: https://pspdfkit.com/blog/2016/hiding-action-share-extensions-in-your-own-apps/所以也請看一下以獲取更多詳細信息,但是我在這里提供的解決方案包含完成這項工作所需的一切。)

1.首先,創建這個class

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. 應用該 class 的實例

當您呈現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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM