IOS/Objective-C: UIActivityViewController: 为不同的 Activity 类型定制

IOS/Objective-C: UIActivityViewController: Customize for different Activity Types

我正在尝试自定义使用 UIActivityViewController 共享的内容。一些博文和answers on SO中建议的方法是subclass UIActivityItemProvider如下。一些答案还说 class 应该采用协议 UIActivityItemSource 但我不清楚协议与提供者有什么关系。

我的代码在视图控制器 class 中,我已经在 .h 文件中接受了 <UIActivityItemSource Protocol>。我还在 .m 文件中放置了以下方法以及用于消息、占位符、URL 和缩略图的类似方法。但是,它们对共享的内容没有任何影响,所有类型、消息、电子邮件、Facebook 等都相同。

我错过了什么?

-(NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(UIActivityType)activityType
{
    if (activityType == UIActivityTypeMessage) {
        return @"My message subject";
    } else if (activityType == UIActivityTypeMail) {
        return @"My mail subject";
    }
    return @"My subject otherwise";
}

编辑:

以下代码可以很好地向不同的活动发送相同的内容。但是上面的方法显然是需要定制的:

NSArray *activityItems = @[text,url];
        UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems: activityItems applicationActivities:nil];
        activityViewController.excludedActivityTypes = @[UIActivityTypePostToWeibo,UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeSaveToCameraRoll];
    [activityViewController setValue:_dare.shtodo forKey:@"Did you see this?"];

        [self presentViewController:activityViewController animated:YES completion:nil];

提前感谢您就我可能缺少的内容提出任何建议,以使其正常工作。

在使用 initWithActivityItems:applicationActivities: 创建 UIActivityViewController 时,您需要传递实现 UIActivityItemSource 的 class 的一个或多个实例 - 请参阅文档 here .视图控制器可能不是一个好的选择,我宁愿制作专门的对象来做这件事。最终您的代码可能类似于:

MySourceClass *mySource = [MySourceClass new];
NSArray *activityItems = @[mySource];
UIActivityViewController *activityViewController =
    [[UIActivityViewController alloc] initWithActivityItems:activityItems
                                      applicationActivities:nil];