如何使用UIActivityItemProvider设置邮件主题

我正在使用UIActivityViewController通过电子邮件共享信息。 我们可以发送电子邮件与正文,附件没有问题。 但是,我们如何设置电子邮件的主题标题。

我注意到这个问题: 如何在UIActivityViewController中设置邮件主题? 接受的解决scheme是使用UIActivityItemSource与以下API activityViewController:subjectForActivityType:。 但是,我们的代码不符合UIActivityItemSource因为我们正在使用UIActivityItemProvider

UIActivityItemSource

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

所以完整的问题是:

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

定义您的自定义项目提供者:

 @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协议。 区别在于,您不必为UIactivityItemSource协议实现那些@required API。

在实例化你的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]; } 

UIActivityItemProvider实现UIActivityItemSource协议。 这是在头上。

 @interface UIActivityItemProvider : NSOperation <UIActivityItemSource> 

所以你可以简单地使用方法- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType返回UIActivityItemProvider子类中的主题。