如何使用UIActivityItemProvider为UIActivityTypeMail共享NSAttritutedString和localfile(NSURL)?

时间:2016-04-18 13:19:25

标签: ios objective-c uiactivityviewcontroller

我在MyActivityItemProvider写了这段代码, [sharedObject objectForKey:@"Mail"] NSArray包含NSAttributedStringNSURL,用于移动存储中的本地文件, 我无法分享两者, 请帮助任何人

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{

    if([activityType isEqualToString:UIActivityTypeMail])

    {

       if ([sharedObject objectForKey:@"Mail"])

       {   
            return [sharedObject objectForKey:@"Mail"][0];
       }

     }

  }

1 个答案:

答案 0 :(得分:0)

您应该可以使用NSTextAttachment类直接插入要发送到NSAttributedString的文件。

修改

此处忽略了NSTextAttachments。

虽然UIActivityItemProvider似乎只能表示单个可共享项(不允许返回数组),但您可以拥有多个UIActivityItemProvider

初始化UIActivityViewController时,只需传递2个不同的项目即可。这是一个示例,我在单个UIActivityItemProvider子类上使用了一个属性来确定它是否应该返回正文或附件。

MyItemSource *itemSourceBody = [[MyItemSource alloc] init];
itemSourceBody.returnAttachment = NO;
MyItemSource *itemSourceAttachment = [[MyItemSource alloc] init];
itemSourceBody.returnAttachment = YES;

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[itemSourceBody, itemSourceAttachment] applicationActivities:nil];
[self presentViewController:activityVC animated:YES completion:nil];

returnAttachment为false时,它返回电子邮件正文;如果为true,则返回本地存储的PDF的URL。

这只是一个例子,并没有很好的架构。

此外,如果您不需要进行大量自定义,则可以直接使用UIActivityViewControllerNSAttributedString而不是NSURL中间人初始化UIActivityItemProvider