4

電子メールを送信するダイアログをモーダルにポップするために使用する MFMailComposeViewController が、iOS6 で機能しなくなったことに気付きました。ダイアログは引き続き表示されますが、本文を設定したり、ビューに何かを入力したりすることはできません。私にできることは、キャンセルを押すことだけです。

このクラスは MFMailComposeViewControllerDelegate インターフェイスを実装します。コードの一部を次に示します。

//h file
@interface ASEmailSender : NSObject


//m file
@implementation MyEmailSender () <MFMailComposeViewControllerDelegate>
@end

@implementation MyEmailSender
...

- (void)emailFile:(ASFile *)file inController:(UIViewController *)viewController {
    MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
    if ([MFMailComposeViewController canSendMail]) {
        mailController.mailComposeDelegate = self;
        [mailController setSubject:@"my subject"];
        [mailController setMessageBody:@"msg body here" isHTML:NO];

        [viewController showIsLoading:YES];
        self.viewController = viewController
        [viewController presentModalViewController:mailController animated:YES];
    }   
}

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error {
    [self.viewController dismissModalViewControllerAnimated:YES];
}

iOS5でうまく機能します。

4

2 に答える 2

1

MyEmailSender を NSObject ではなく UIViewController に変更することで、これを修正しました。何らかの理由で、これにより iOS6 で実行する際の問題が修正されます。新しいコードは次のようになります。

//h file
@interface ASEmailSender : UIViewController <MFMailComposeViewControllerDelegate>


//m file
@implementation MyEmailSender
...
(same functions as before)

現在、iOS5 と iOS6 の両方で動作します。

于 2012-10-24T15:31:19.617 に答える
0

まったく同じ問題を修正しました(iOS6では、空白のコンポーザー画面で、キャンセルボタンのみが機能しますが、iOS5では同じコードが正常に機能します。)

私はインポートしました:

#import <MessageUI/MFMailComposeViewController.h>

しかし、私はこれを忘れました:

#import <MessageUI/MessageUI.h>

MessageUI.h のインポートを追加した後、iOS 6 での問題はなくなりました。

于 2012-12-03T15:39:48.037 に答える