ios - 在 UIActivityViewController 中与不同类型共享数据

标签 ios objective-c ios7

以下帖子提出了一个极其相似的问题:Different data for sharing providers in UIActivityViewController .但我的问题是不同的。

我知道如何使用 itemForActivityType 与不同的 Activity 共享相同类型的不同数据。例如:

- (id) activityViewController:(UIActivityViewController *)activityViewController
          itemForActivityType:(NSString *)activityType
{
    if ( [activityType isEqualToString:UIActivityTypePostToTwitter] )
       return @"This is a #twitter post!";
    if ( [activityType isEqualToString:UIActivityTypePostToFacebook] )
       return @"This is a facebook post!";
    if ( [activityType isEqualToString:UIActivityTypeAirDrop] )
       return @"Airdrop message text";
    else
       return nil;
}

但是,我的问题是:如果我有不同类型的数据要与不同的事件共享,我应该怎么办?。例如,如果我想分享:

  • Twitter 上的一个字符串;
  • 一组字符串和 Facebook 上的图像;
  • Airdrop 图片的实际数据(例如 NSData)。

附言:

我还查看了以下协议(protocol)函数:

- (id)activityViewControllerPlaceholderItem:;

但是,我不能使用它,因为我们不知道这里的 activityType 的值。

最佳答案

您想要创建和共享两个或多个符合 UIActivityItemSource 的对象,其中一个返回字符串,另一个返回图像等。然后,当调用请求项目的委托(delegate)回调时,您检查选择了哪种事件类型(Facebook、邮件、AirDrop 等),并且 ItemSource 的一个或多个返回 nil如果该项目不适用于该事件。确保对于任何选定的事件,至少有一项返回非零值。

你可以看看airdrop sample code获取有关如何实现 UIActivityItemSource

的一些示例

关于ios - 在 UIActivityViewController 中与不同类型共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26551408/

相关文章:

ios - 如何处理SwiftUI中的水龙头开始

objective-c - Mavericks 上 NSWindow contentView 的奇怪问题

iphone - 在 iOS 7 中突出显示我的按钮

ios - Swift,NSCoding 来保存一个类的数组不起作用

ios - 在 Swift 运行时确定实例是否具有可设置的属性

objective-c - 使用 NSXMLParser 解析问题

ios - NSSortDescriptors 获得正确的类比较方法

objective-c - 在给定索引上启动 UIPageViewController

ios - mpmovieplayercontroller : Playing in background

ios - 如何在 iOS 应用程序中按下按钮时显示按钮列表