在 UIActivityItemProvider 内自定义 UIActivityTypePostToFacebook 的行为

Posted

技术标签:

【中文标题】在 UIActivityItemProvider 内自定义 UIActivityTypePostToFacebook 的行为【英文标题】:Customize the behavior of UIActivityTypePostToFacebook inside of UIActivityItemProvider 【发布时间】:2013-11-24 10:09:42 【问题描述】:

我不相信有办法做我要问的事情,但我想我会问以防万一。

我目前正在继承UIActivityItemProvider,以便为各种社交媒体平台提供定制消息:

- (id)item

    if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) 
        //Possibly present some view modally here to let the user decide on text to return?
        return @"Some facebook message";
     else if ([self.activityType isEqualToString:UIActivityTypePostToTwitter]) 
       return @"Some Tweet";      
     

问题是我想为用户提供一个中间选项来自定义他们想要在 facebook 上发布的消息(“一些 facebook 消息”)。理想情况下,这将是一个 UIActionSheet,他们可以在三个选项中选择他们希望如何格式化数据的选项之一。

UIActionSheet 只是一个示例,但您可以想象其他类型的自定义视图在用户点击 facebook 图标直到他们看到他们在帖子中输入文本的实际 UI 期间呈现在 segue 中。

有没有办法做到这种行为?

【问题讨论】:

【参考方案1】:

您只想实现NSObject 的子类并实现UIActivityItemSource 协议。然后,从 activityViewController:itemForActivityType: 返回一个 NSURL 对象。这将作为 Facebook 帖子的 URL 附件,您将其传递给 UIActivityViewController

如果安装了 Facebook 应用程序,它将打开应用程序的共享对话框,否则将打开 ios 原生共享对话框,其中 URL 作为附件。

根据 Facebook 指南,您不能预先填写分享的文字。不过你可以用 Twitter 做到这一点,但为此你必须有另一个 NSObject 子类并实现 UIActivityItemSource 并从同一消息返回 NSString。这将作为推文的文本。

同样,我相信返回 UIImage 可以将其设置为 Facebook 中的附件。

【讨论】:

以上是关于在 UIActivityItemProvider 内自定义 UIActivityTypePostToFacebook 的行为的主要内容,如果未能解决你的问题,请参考以下文章

当 UIActivityViewController 呈现时,如何确保 UIActivityItemProvider 的项目准备就绪?

Xcode 8 beta 6 UIActivityItemProvider 错误与@objc 兼容性

iOS UIActivityViewController 使用 UIActivityItemProvider “忘记”项目

UIActivityViewController 的标题是怎么设置的?

在 Xcode 中使用 UIActivityViewController 填写电子邮件标题(和附件)

UIActivityViewController:可以通过配置步骤实现流程吗?