我想通過電子郵件附件從我的應用程序中使用UIActivityItemProvider共享文件。我還需要填寫電子郵件的主題行,並指定附件的名稱與設備上存儲的文件的名稱不同。如何使用UIActivityItemProvider發送附帶UIActivityViewController的電子郵件?
這是我正在使用的代碼。問題是電子郵件中缺少附件。
@interface ItemProvider:UIActivityItemProvider
@property (nonatomic, strong) NSURL *filepath;
@property (nonatomic, strong) NSString *emailBody;
@property (nonatomic, strong) NSString *emailSubject;
@end
@implementation ItemProvider
- (id)initWithPlaceholderItem:(id)placeholderItem
{
//Initializes and returns a provider object with the specified placeholder data
return [super initWithPlaceholderItem:placeholderItem];
}
- (id)item
{
//Generates and returns the actual data object
return [NSDictionary dictionary];
}
// The following are two methods in the UIActivityItemSource Protocol
// (UIActivityItemProvider conforms to this protocol) - both methods required
#pragma mark UIActivityItemSource
//- Returns the data object to be acted upon. (required)
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
if ([activityType isEqualToString:UIActivityTypeMail]) {
return @{@"body":self.emailBody, @"url":self.filepath};
}
return @{@"body":self.emailBody, @"url":self.filepath};
}
//- Returns the placeholder object for the data. (required)
//- The class of this object must match the class of the object you return from the above method
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
return @{@"body":self.emailBody, @"url":self.filepath};
}
-(NSString *) activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType {
return self.emailSubject;
}
@end
然後在我的viewController我這樣做:
ItemProvider *provider = [[ItemProvider alloc] initWithPlaceholderItem:@{@"body":emailBody, @"url":filePath}];
provider.emailBody = emailBody;
provider.emailSubject = info.title;
provider.filepath = filePath;
NSArray *activityItems = @[provider];
// Build a collection of custom activities (if you have any)
// NSMutableArray *customActivities = [[NSMutableArray alloc] init];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityController animated:YES completion:nil];
謝謝。您的解決方案可以正常工作,但不符合以下要求(我更新了問題以明確): 1.我需要填寫電子郵件的主題(這是我訴諸供應商解決方案的一個原因)。 2.我需要提供一個不同於文件名的附件的名稱。 – RawMean
爲什麼你們不學會準確地描述你想要或需要的東西?它浪費時間爲那些想要幫助你的人,如果你首先說我需要這個,然後在收到答案後說,但我需要更多的這個,這和這個...我已經添加了設置主題... – thorb65
你是對的不是有關該要求的足夠具體。我道歉。 [avc setValue:@「Your email Subject」forKey:@「subject」]沒有記錄,所以我認爲它會被Apple拒絕。我想這就是爲什麼蘋果已經添加了這個API,他們希望你改用它。 - (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType; 此外,這仍然不能解決具有自定義名稱的附件的問題。 – RawMean