ダウンロードボタンはあなたのボタンだと思います。そして、各「ページ」は異なるView Controllerであると想定していますか?
本当に効率的になりたい場合は、メール作成ロジックを保持する別のクラスを作成します。
簡単に解決するには、ボタンをビュー コントローラーの IBAction に接続し、そこにメール コンポーザー ロジックを配置するか、そこからメソッドを呼び出します。
簡単な例を次に示します。
- (IBAction)sendProblemReport:(UIButton*)sender { //note: connect your button here
UIButton *button;
if ([sender isKindOfClass:[UIButton class]]) {
button = sender;
}
else {
return; //leave if not a button
}
//note: if you do it this way be sure to set tag values in interface builder on your button. The other way is to have an action for each button.
switch (button.tag) {
case 1:
NSURL *fileURL1 = [[NSURL alloc] initFileURLWithPath:@"YOUR FILE PATH HERE"];
NSData *soundfile = [[NSData alloc] initWithContentsOfURL:fileURL1];
NSString *fileTitle = @"YOUR Nice File Name"; //sound.mp3
[self showDiagMailSheetAttachingSoundFile:soundFile usingFileName:filename];
break;
}
}
- (void)showDiagMailSheetAttachingSoundFile:(NSData*)soundFile usingFileName:(NSString*)fileName {
MFMailComposeViewController *diagMail = [[MFMailComposeViewController alloc]init];
[diagMail setMailComposeDelegate:self];
if ([MFMailComposeViewController canSendMail]) {
[diagMail setToRecipients:@[@"fromaddress@gmail.com"]];
[diagMail setCcRecipients:nil];
[diagMail setBccRecipients:nil];
[diagMail setSubject:@"subject message"];
[diagMail setMessageBody:nil isHTML:NO];
[diagMail addAttachmentData:soundFile file mimeType:@"audio/mpeg" fileName:fileName]; //note: not sure of the mime type you need.
diagMail.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:diagMail animated:YES completion:nil];
}
}
- (void)mailComposeController:(MFMailComposeViewController*)controller
didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
// Notifies users about errors associated with the interface
switch (result)
{
case MFMailComposeResultCancelled:
// @"Result: Mail sending canceled";
break;
case MFMailComposeResultSaved:
// @"Result: Mail saved";
break;
case MFMailComposeResultSent:
// @"Result: Mail sent";
break;
case MFMailComposeResultFailed:
// @"Result: Mail sending failed";
break;
default:
// @"Result: Mail not sent";
break;
}
[self dismissViewControllerAnimated:YES completion:^{
[self cancel:self];
}];
}
注: これを別のサブクラスに入れるには、そのクラスを使用して単純に「MFMailComposeViewController」を返し、それを各ビュー コントローラーに表示します。このアプローチはより効率的で、複数の場所で同じコードを呼び出すことができます。
わかりました、それが役立つことを願っています。そうでない場合はお知らせください。