实现UIActivityItemSource协议

我有这些协议方法,

activityViewControllerPlaceholderItem:activityViewController:itemForActivityType:

但他们永远不会被召唤。 我如何告诉UIActivityViewController调用它们?

我也有一个UIActivityItemProvider子类,但我对谁调用这两个方法感到困惑。 我真的很感激一些示例代码,因为我在网上找不到任何东西。 🙂

根据文件。 您传递给的活动项目数组
-initWithActivityItems:applicationActivities:可以是数据对象的数组,如字符串或图像,也可以是实现UIActivityItemSource协议的对象数组。

如果传递实现UIActivityItemSource协议的对象数组,则UIActivityItemSource实例将在您的活动项上调用这些方法。 这些对象不一定必须是UIActivityItemProvider子类。 UIActivityItemProvider只是一个符合此协议的类。

你可以在任何你想要的地方实现协议,甚至你的viewcontroller都可以。 只需使用initWithActivityItems:@[self]实例化activityViewController initWithActivityItems:@[self]

JotWee的回答帮助了我。

不需要子类, UIActivityItemSource协议方法可以在实现共享按钮的视图控制器中实现。

在活动项数组中添加self非常重要,就像这样(如JotWee建议的那样):

 NSArray *activityItems = [NSArray arrayWithObjects:self, url, image, nil]; 

这是我的最终实施:

ViewController.h

 @interface ViewController : UIViewController  

ViewController.m

 - (void)shareBarButtonItemClick:(UIBarButtonItem *)sender { NSURL *url = [NSURL URLWithString:@"http://example.com"]; NSURL *imageUrl = [NSURL URLWithString:@"http://example.com/images/1.jpg"]; UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]]; NSArray *activityItems = [NSArray arrayWithObjects:self, url, image, nil]; UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; [self presentViewController:activityViewController animated:YES completion:nil]; } - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { return @"Summary Text"; } - (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { return @""; } - (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType { return @"Subject"; }