Ios 如何使用UIActivityItemProvider设置邮件主题
我正在使用Ios 如何使用UIActivityItemProvider设置邮件主题,ios,objective-c,email,uiactivityviewcontroller,Ios,Objective C,Email,Uiactivityviewcontroller,我正在使用UIActivityViewController通过电子邮件共享信息。我们能够发送电子邮件与身体,附件没有问题。但是我们如何设置电子邮件的主题标题呢 我注意到这个问题: 公认的解决方案是将UIActivityItemSource与以下API一起使用。但是,我们的代码不符合UIActivityItemSource,因为我们使用的是UIActivityItemProvider UIActivityItemSource 如果希望从应用程序的现有对象之一提供数据,而不是创建单独的UIActiv
UIActivityViewController
通过电子邮件共享信息。我们能够发送电子邮件与身体,附件没有问题。但是我们如何设置电子邮件的主题标题呢
我注意到这个问题:
公认的解决方案是将UIActivityItemSource
与以下API一起使用。但是,我们的代码不符合UIActivityItemSource
,因为我们使用的是UIActivityItemProvider
UIActivityItemSource
如果希望从应用程序的现有对象之一提供数据,而不是创建单独的UIActivityItemProvider对象,则可以使用此协议
因此,完整的问题是:
如果我使用的是
UIActivityItemProvider
而不是UIActivityItemSource,如何设置电子邮件主题?在实例化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];
}
定义自定义项目提供程序:
@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
协议实现那些@必需的API UIActivityItemProvider
实现UIActivityItemSource
协议。就在页眉上
@interface UIActivityItemProvider : NSOperation <UIActivityItemSource>
@interface UIActivityItemProvider:NSOperation
因此,您可以简单地使用方法-(NSString*)activityViewController:(UIActivityViewController*)activityViewController subjectForActivityType:(NSString*)activityType
返回UIActivityItemProvider
子类中的主题。看这个问题:这有点酷。我不知道我们仍然可以使用UIActivityItemProvider,甚至不需要显式地将其添加到UIActivityItemProvider。谢谢你,伙计。这听起来是正确的答案。谢谢,这是一个可能的答案。然而,我不太喜欢使用未记录的api。我将根据评论提供一个更优雅的答案。