0

過去 2 日間、アプリ内からのメール送信を有効にしようとしてきました。ここにいる賢い人たちの 1 人が私を助けてくれることを願っています。presentModalViewController は私には機能しません (理由の説明なしにアプリをクラッシュさせるだけです)。そのため、MFMailComposeViewController のビューを追加する必要があります。これが私の試みです:

MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
    controller.mailComposeDelegate = self;
    [controller setSubject:@"test subject"];
    [controller setMessageBody:@"this is the message body" isHTML:NO];

    //  [self presentModalViewController:controller animated:YES]; //this crashes the app
//so I try this instead:        
    controller.view.frame = CGRectMake(0,0,480,320);
    [self.view addSubview:controller.view];
    [controller release];

画面に追加されるのは件名バーのみで、キャンセル ボタンと送信ボタンがあります。テキスト フィールド (To:、Cc:、件名、本文) は表示されません。それらが MFMailComposeViewController のビューの一部ではないのはなぜですか?どうすれば表示できますか?

4

5 に答える 5

2

正直なところ、を使用する必要がありますpresentModalViewController。SDKを無理やり回避するのではなく、クラッシュのデバッグを検討してください。デバッガーをオンにして、コンソールに例外が記録されているかどうかを確認します。クラッシュログなどを確認してください...

また、それselfが適切なデリゲートであり、UIViewControllerサブクラスであることを確認してください。

于 2009-07-05T00:29:39.780 に答える
2

私はこの問題を解決しました:

これをしないでください:

MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];

でもこれは:

MFMailComposeViewController *mailComposeViewController = [MFMailComposeViewController new];
于 2011-11-07T08:13:51.070 に答える
1

さて、私は、ダミーのView Controllerを作成する必要があると判断しました。そうしないと、気の毒なことがスライドしません。

Sys_Mail私はそれと呼ばれるクラスを作成します@interface Sys_Mail : UIViewController <MFMailComposeViewControllerDelegate>

次に、基本的にルートビュービューコントローラーを作成します。私は何時間もポートレート/ランドスケープと格闘しましたが、ビューコントローラをトップレベルビュー(ランドスケープ変換を含む)に接続すると、ランドスケープウィンドウとしてスライドインすることを決定しました。視覚的な不具合が1つだけあり、新しいウィンドウがスライドする間、親ウィンドウが数秒間移動します。これは、ランドスケープ変換が親に奇妙なことをすることの副作用です。

スライディングウィンドウで横向きを取得するにSys_Mailは、自動回転メッセージを処理するメソッドをクラスで宣言する必要があります。

//=======================
//    shouldAutorotateToInterfaceOrientation
//=======================
//  see if this ever gets called for the view controller
-(BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation 
{ 
  if (TRACE) printf ("shouldAutorotateToInterfaceOrientation\n");
  return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);  // or whatever orientation is needed
}

変数gMasterViewは私のトップレベルのビューを参照します(ランドスケープ変換があり、ウィンドウにアタッチされています)。サブビューは機能していないようです。ビューコントローラはひどいです。それらはより多くのデザインパターンクラップです。マイクロソフトのMFCタイプのクラッドではなく、ビューを完全に制御したいのです。

Sys_Mail* g_root_vc;

if (g_root_vc == nil) {
  //  create an empty view controller so we have something to work with
  g_root_vc = [[Sys_Mail alloc] init];
  g_root_vc.view = (UIView*) gMasterView; 
}

したがって、この

于 2009-08-16T00:01:36.833 に答える
1

代わりに、次のことを試してください。

[[self navigationController] presentModalViewController...];

それがそれを提示する適切な方法だからです。ビューを手動で追加しようとすると、残念ながら完全に正しくなく、機能しません。

于 2009-07-05T00:27:48.553 に答える
0

同じクラッシュがあり、最後に presentModalViewController メッセージを [self navigationController] に送信することで修正できます。

これが私のコードです:

// Create the Mail composer view controller
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];

// Set the view controller delegate
controller.mailComposeDelegate = self;

// Set recipients, if you want
[controller setToRecipients:recipients];

// Set subject, if you want
[controller setSubject:@"The subject"];

// Set message body, if you want
[controller setMessageBody:@"The message body" isHTML:YES]; // isHTML -> YES/NO depending the message body

// Present the view controller 
[[self navigationController] presentModalViewController:controller animated:YES];

// Memory management
[controller release];

これが役立つことを願っています!

于 2010-08-06T19:36:12.803 に答える