2012-01-22 13 views
0

MFMailComposeViewControllerを実装しましたが、問題が発生しました。dismissModalViewControllerAnimatedはスーパービューから削除する前に最初にアニメーション化する必要がありますか?

私のスーパービューでは、ボタンを押すと、アプリ内メールが表示されます。 ユーザーがメールフォームを送信または終了するまで、すべて正常に動作します。

[self.view removeFromSuperview];を実行する前に、アニメーション(電子メールフォームを閉じる)が最初に終了するまで待つ必要があるようです。アニメーションが終了する前にこの行が実行されても何も起こらず、ビューが削除されない場合、現在のUIViewが削除されないため、画面上の何もタップできません。クラスを呼び出す

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 

    [self dismissModalViewControllerAnimated:YES]; 

    // Removes the view so that delegate is passed back to the superview 
    [self.view removeFromSuperview]; 

} 

私のスーパーアクション:

- (IBAction)buttonPressedSendMail { 
    MailComposerViewController *mailComposer = [[MailComposerViewController alloc] init]; 
    [self addSubview:mailComposer.view]; 
    [mailComposer sendMail:nil]; 
} 

[[self view] setHidden:YES];はUIViewのを隠すためには動作しますが、私は、これはそれを行うための正しい方法だとは思いません。

答えて

1

dispatch_afterブロックを使用できます。メール作成者が退会した後でdelayInSecondsを調整することができます。

double delayInSeconds = 1.0; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self.view removeFromSuperview]; 
    }); 

またはあなたはこれを試すことができます。

[自己dismissViewControllerAnimated:YES完了:^ { [self.view removeFromSuperview]。 }];

+0

ありがとうございました。それが私がエラーを見つけるためにしたものです。しかし、これが最良の方法であるかどうかは分かりません。 – AReality

+0

別の方法でコードを更新して、View Controllerを終了しました。 –

+0

モーダルビューコントローラが正しく表示されていません。非常に具体的な必要がある場合を除き、私はXaviの答えのコードに従います。 –

2

presentModalViewControllerであなたのビューコントローラ提示:あなたは

[self dismissModalViewControllerAnimated:YES]; 

にView Controllerのビューを追加または削除する必要はありもしないように続いて、モーダルビューを閉じる

MailComposerViewController *mailComposer = [[MailComposerViewController alloc] init]; 
[self presentModalViewController:mailComposer animated:YES]; 

:アニメーションを。