实现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"; }