2

ユーザーがiPhoneからテストメールを送信できるアプリがあります。私のアプリは、次のようなメールの作成機能をアクティブにするメソッドを呼び出します。

-(void)displayComposerSheet
{

    //set up a way to cancel the email here
    //picker is an instance of MSMailComposeViewController already declared in the .h file

    [picker setSubject:@"Test Mail"];

    // Set up recipients

    // Attach an image to the email
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Icon" ofType:@"png"];
    NSData *myData = [NSData dataWithContentsOfFile:path];
    [picker addAttachmentData:myData mimeType:@"image/png" fileName:@"Icon"];

    // Fill out the email body text
    NSString *emailBody = @"This is a test mail.";
    [picker setMessageBody:emailBody isHTML:NO];

    [self presentModalViewController:picker animated:YES];
    NSLog(@"mail is working");

}


- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    emailLabel.hidden = NO;
    // Notifies users about errors associated with the interface
    switch (result)
    {
        case MFMailComposeResultCancelled:
            emailLabel.text = @"Mail sending canceled.";
            break;
        case MFMailComposeResultSaved:
            emailLabel.text = @"Mail saved.";
            break;
        case MFMailComposeResultSent:
        {
            emailLabel.text = @"Mail sent.";
            NSLog(@"It's away!");


            UIAlertView *emailAlertView = [[UIAlertView alloc] initWithTitle:@"Sent!" message:@"Mail sent successfully." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [emailAlertView show];
            [self dismissModalViewControllerAnimated:YES];
            [self.navigationController popViewControllerAnimated:YES];


        }
            break;
        case MFMailComposeResultFailed:
        {
            emailLabel.text = @"Mail sending failed.";


        }
            break;
        default:
        {
            emailLabel.text = @"Mail not sent.";

        }
        break;
    }

}

私の問題は、メールの作成機能がアクティブな場合、この機能を終了してアプリに戻ることができないことです。これを回避する唯一の方法は、実際に先に進んでメッセージを送信することです。ナビゲーションバーの左上隅に表示されるデフォルトの「キャンセル」バーボタンがあり、クリックすると、「ドラフトの削除」、「ドラフトの保存」、「キャンセル」の3つのオプションが表示されます。「下書き削除」を選択すると、メッセージ作成画面に戻る以外は何もしません。メールの作成機能を開始した後、送信する前にユーザーがアプリに戻ることができるようにする方法はありますか?これを実現するために「キャンセル」バーボタンに機能を追加する方法はありますか?

返信してくださった皆様、ありがとうございました。

4

4 に答える 4

3

メソッドで実装する必要がありMFMessageComposeViewControllerDelegateます- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result

このメソッドでメッセージ ビューを閉じます。

編集:私は混乱しましMFMailComposeViewControllerDelegateたが、目的はと同じですMFMessageComposeViewControllerDelegate

于 2013-01-10T17:28:40.167 に答える
0

...didFinishWithResult:メソッド内の独自のコードを見てください。

    case MFMailComposeResultCancelled:
        emailLabel.text = @"Mail sending canceled.";
        break;
    case MFMailComposeResultSaved:
        emailLabel.text = @"Mail saved.";
        break;
    case MFMailComposeResultSent:
    {
        emailLabel.text = @"Mail sent.";
        NSLog(@"It's away!");


        UIAlertView *emailAlertView = [[UIAlertView alloc] initWithTitle:@"Sent!" message:@"Mail sent successfully." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [emailAlertView show];
        [self dismissModalViewControllerAnimated:YES];
        [self.navigationController popViewControllerAnimated:YES];


    }

その結果MFMailComposeResultSent、モーダルビューコントローラーを閉じてナビゲーションスタックをポップします。これにより、メール作成ビューコントローラーが消え、スタックをポップして、作成ビューコントローラーを表示していたビューコントローラーを削除します。ただし、結果がの場合はMFMailComposeResultCancelled、ラベルのテキストを設定するだけです。についても同じですMFMailComposeResultSaved。ユーザーがキャンセルまたは保存したときに作成ビューコントローラーを停止する場合は、これらの場合にもメッセージ作成ビューコントローラーを閉じる必要があります。

于 2013-01-10T17:44:25.473 に答える
0

このメソッドをView Controllerに追加する必要があります

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [self becomeFirstResponder];
    [self dismissViewControllerAnimated:YES completion:nil];
}

これが誰かに役立つことを願っています。

于 2013-06-18T08:25:38.147 に答える
0

MFMailComposeViewController MFMailComposeViewController のデリゲートを設定 *mailcomposer = [[MFMailComposeViewController alloc]init];

mailcomposer.mailComposeDelegate = 自己;

そして、このデリゲート メソッドを使用します -(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error

于 2013-12-11T05:38:17.640 に答える