如何使用UIActivityItemProvider设置邮件主题

7
我正在使用UIActivityViewController通过电子邮件分享信息。我们可以轻松发送带有正文和附件的电子邮件。但是,如何设置电子邮件的主题标题呢?
我注意到这个问题:How to set a mail Subject in UIActivityViewController? 接受的解决方案是使用 UIActivityItemSource 和以下 APIactivityViewController:subjectForActivityType: 来设置主题。但是,我们的代码不符合UIActivityItemSource,因为我们使用的是UIActivityItemProvider

UIActivityItemSource

在您想要提供应用程序中现有对象的数据而不是创建单独的UIActivityItemProvider对象的情况下,可以使用此协议。

所以完整的问题是: 如果我正在使用UIActivityItemProvider而不是UIActivityItemSource,我该如何设置电子邮件主题?

1
请看这个问题:https://dev59.com/-2Ij5IYBdhLWcg3wJB9- - weso
这很酷。我不知道我们甚至可以在没有明确添加到UIActivityItemProvider的情况下仍然使用UIActivityItemProvider。谢谢,伙计。这听起来像是正确的答案。 - Yuchen
3个回答

7
定义自定义项目提供程序:
@interface CustomProvider : UIActivityItemProvider
@end

添加到您的实现中:

@implementation CustomProvider

// Some other code ... -(id)item and etc. 

- (NSString *) activityViewController:(UIActivityViewController *)activityViewController
               subjectForActivityType:(NSString *)activityType
{
      return @"A dummy Title";
}

@end

请注意,UIActivityItemProvider会自动符合UIactivityItemSource协议。 不同之处在于,您不必实现那些@required API以符合UIactivityItemSource协议。

5
在实例化UIActivityViewController之后,只需添加这行代码:
[activityController setValue:@"Your email Subject" forKey:@"subject"];

我是这样使用它的:
- (void)share {
    NSArray *activityItems;

    NSString *texttoshare = [NSString stringWithFormat:@"Hey bro! check this info.\n%@\n%@", self.infoBean.title, self.infoBean.desc];
    UIImage *imagetoshare = imageView.image;//this is your image to share

    if (imagetoshare != nil) {
    activityItems = @[imagetoshare, texttoshare];
    } else {
    activityItems = @[texttoshare];
    }
    NSArray *exTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeSaveToCameraRoll];


    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    activityController.excludedActivityTypes = exTypes;


    [activityController setValue:@"Your email Subject" forKey:@"subject"];

    [self presentViewController:activityController animated:YES completion:nil];
}

1
谢谢,这是一个可能的答案。然而,我不太喜欢使用未记录的API。我将提供一个更优雅的答案,基于评论。 - Yuchen

2

UIActivityItemProvider 实现了 UIActivityItemSource 协议。这就是在标题中的内容。

@interface UIActivityItemProvider : NSOperation <UIActivityItemSource>

因此,您可以简单地使用以下方法:- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 将主题返回到您的UIActivityItemProvider子类中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接