根据选定的活动共享不同的内容 - UIActivityController

Posted

技术标签:

【中文标题】根据选定的活动共享不同的内容 - UIActivityController【英文标题】:Sharing different content based on selected activity - UIActivityController 【发布时间】:2017-08-10 10:52:05 【问题描述】:

目前,每当用户想要使用UIActivityController 共享图像时,我都会发送图像和文本。 这在电子邮件和 gmail 上运行良好,但对于 whatsapp 或 Skype(仅发送文本)会变得混乱。 因此,如果用户选择活动作为 whatsapp 或 Skype,我想做的是共享图像 url 和文本。这可能吗?

我搜索了这个问题,发现你应该继承UIActivityItemProvider并实现我所做的UIActivityItemSource的方法,但是我无法获得实现方法的回调。

我已经实现了这些方法 activityViewControllerPlaceholderItem:activityViewController:itemForActivityType: 但我没有收到回电。

【问题讨论】:

【参考方案1】:

只需创建UIActivityItemProvider 的子类并覆盖item 属性以提供您的自定义activity items,即

class CustomActivityItemProvider: UIActivityItemProvider

    override var item: Any
        switch self.activityType!
        
        case UIActivityType.postToFacebook:
            return "Hello"
        default:
            return "Whatever"
        
    

使用它:

let activityItem = CustomActivityItemProvider(placeholderItem: "")
let activityViewController = UIActivityViewController(activityItems: [activityItem], applicationActivities: nil)
self.present(activityViewController, animated: true, completion: nil)

此外,您可以只自定义UIActivityType,由Apple 公开以供开发人员使用。对于UIActivityTypes,请参考:https://developer.apple.com/documentation/uikit/uiactivitytype

【讨论】:

完美而“迅速”的答案。因此,如果我想根据活动类型传递自定义数据,显然我不需要重写协议方法。 当然..享受..:) 你到底想改变什么?

以上是关于根据选定的活动共享不同的内容 - UIActivityController的主要内容,如果未能解决你的问题,请参考以下文章

获取选项卡式活动的当前选定选项卡

If-else语句基于先前的活动选择来获取共享偏好

使用 UIDocumentInteractionController 和 UIActivityViewController 时禁用共享扩展选项

如何首先在活动中显示选定的视图

不同活动的片段之间的共享元素转换

不同活动的片段之间的共享元素转换