如何使用UIActivityItemProvider设置邮件主题

时间:2015-01-21 14:48:02

标签: ios objective-c email uiactivityviewcontroller

我正在使用UIActivityViewController通过电子邮件分享信息。我们能够发送带有正文,附件的电子邮件,没有任何问题。但是我们如何设置电子邮件的主题标题。

我注意到这个问题:How to set a mail Subject in UIActivityViewController? 已接受的解决方案是将UIActivityItemSource与以下API activityViewController:subjectForActivityType:一起使用。但是,我们的代码不符合UIActivityItemSource,因为我们使用UIActivityItemProvider

  

UIActivityItemSource

     

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

所以完整的问题是:

如果我使用UIActivityItemProvider而不是UIActivityItemSource,如何设置电子邮件主题?

3 个答案:

答案 0 :(得分:6)

定义自定义项目提供者:

@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协议实施UIactivityItemSource API。

答案 1 :(得分: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];
}

答案 2 :(得分:1)

UIActivityItemProvider实现了UIActivityItemSource协议。它就在标题中。

@interface UIActivityItemProvider : NSOperation <UIActivityItemSource>

因此,您只需使用方法- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType即可返回UIActivityItemProvider子类中的主题。