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 : @ "귀하의 이메일 제목"forKey : @ "제목"]은 문서화되어 있지 않으므로 Apple에 의해 거부 될 것입니다. 나는 이것이 애플이이 API를 추가 한 이유이며, 대신에 그것을 사용하기를 원한다고 생각한다. - (NSString *) activityViewController : (UIActivityViewController *) activityViewController subjectForActivityType : (NSString *) activityType; 또한 사용자 지정 이름이있는 첨부 파일의 문제는 해결되지 않습니다. – RawMean