0

ページに移動してトーンを選択すると、ユーザーが個々のページからサウンド ファイルをダウンロードして自分自身に電子メールで送信できるようにするアプリを作成しています。

各ページにあるダウンロードボタンの接続方法と、メールコンポーザーへの接続方法を知っている方がいらっしゃいましたら教えていただきたいです。連絡先ページでメール コンポーザーを既に理解しましたが、メール コンポーザーを各ページのダウンロード ボタンに接続しようとしても何も起こりません。タグを使用してみましたが、まだ失われています。前もって感謝します

4

1 に答える 1

0

ダウンロードボタンはあなたのボタンだと思います。そして、各「ページ」は異なる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」を返し、それを各ビュー コントローラーに表示します。このアプローチはより効率的で、複数の場所で同じコードを呼び出すことができます。

わかりました、それが役立つことを願っています。そうでない場合はお知らせください。

于 2013-03-15T00:06:17.077 に答える