我通过共享来自其他应用的内容看到,当使用共享表分享到Gmail Mail应用时,可以设置不同的主题和正文。我已经实现了它,它可以在本机邮件应用程序上正常工作,但不适用于Gmail。
进入Yelp并分享业务,然后从共享表中选择gmail,我看到主题和正文是不同的。主题包含业务地址,而正文包含地址+ Yelp上业务的链接。
我尝试在本机邮件应用程序上成功复制此逻辑,但未在Gmail应用程序中复制。
我尝试了以下内容:
实施UIActivityItemSource方法
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
return @"";
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
return @"body";
}
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
return @"subject";
}
结果
Apple Mail主题设置为"主题",正文设置为"正文"
Gmail主题设置为"正文",正文设置为"正文"
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType
共享到Gmail应用中时从未调用过。
然后我尝试更黑客的方式
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[@"body"] applicationActivities:nil];
[activityViewController setValue:@"subject" forKey:@"subject"];
结果
Apple Mail主题设置为"主题",正文设置为"正文"
Gmail主题设置为"正文",正文设置为"正文"
如何让Gmail表现得像Apple Mail一样?
同样,我已经看到其他应用程序(如Yelp和Safari)通过共享表从Gmail应用程序中获得了正确的行为。任何建议都将不胜感激,谢谢。
答案 0 :(得分:-3)
[_activityViewController setValue:subject forKey:@"subject"];
- 不支持的方式。
设置正文和主题的正确方法(iOS 7.0及更高版本)
- 对要共享的项目实施UIActivityItemSource
协议。
// EmailDataProvider.h
@interface EmailItemProvider : NSObject <UIActivityItemSource>
@property (nonatomic, strong) NSString *subject;
@property (nonatomic, strong) NSString *body;
@end
// EmailDataProvider.m
@implementation EmailDataProvider
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
return _body;
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
return _body;
}
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
return _subject;
}
@end
而不是呈现它:
EmailDataProvider *emailItem = [[EmailDataProvider alloc]init];
emailItem.subject = @"This is Subject text.";
emailItem.body = @"This is Body,set by programatically";
UIActivityViewController *activityViewController =
[[UIActivityViewController alloc] initWithActivityItems:@[emailItem]
applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];