9

私はすでに関連する質問に目を通しましたが、何も私の問題を解決していません.

dismissViewControllerAnimated:animated:completionpresentViewControllerAnimated:animated:completionを連続して使おうとしています。ストーリーボードを使用して、部分的なカール アニメーションを介してモーダルに InfoController を表示しています。

部分的なカールにより、開始したい InfoController のボタンが表示されますMFMailComposeViewController。部分的なカールは を部分的に隠しているため、MFMailComposeViewController最初に部分的なカールのアニメーションを解除して InfoController を閉じたいと思います。MFMailComposeViewController次に、アニメーション化したいと思います。

現在、これを試してみると、部分的なカールはアニメーション化MFMailComposeViewControllerされませんが、表示されません。また、次の警告があります。

警告: MFMailComposeViewController: を表示しようとしています: InfoController: のビューがウィンドウ階層にありません!

InfoController.h:

#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

@interface InfoController : UIViewController <MFMailComposeViewControllerDelegate>

@property (weak, nonatomic) IBOutlet UIButton *emailMeButton;

-(IBAction)emailMe:(id)sender;

@end

InfoController.m

#import "InfoController.h"

@interface InfoController ()

@end

@implementation InfoController 

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (IBAction)emailMe:(id)sender {
    [self dismissViewControllerAnimated:YES completion:^{
        [self sendMeMail];
    }];
}

- (void)sendMeMail {
MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init];
if([MFMailComposeViewController canSendMail]){
    if(mailController)
    {
        NSLog(@"%@", self); // This returns InfoController 
        mailController.mailComposeDelegate = self;
        [mailController setSubject:@"I have an issue"];
        [mailController setMessageBody:@"My issue is ...." isHTML:YES];
        [self presentViewController:mailController animated:YES completion:nil];
    }
}
}

- (void)mailComposeController:(MFMailComposeViewController*)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error;
{
    if (result == MFMailComposeResultSent) {
        NSLog(@"It's sent!");
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}

[self dismissViewControllerAnimated:YES completion:^{}];また、 inをコメント アウトすると(IBAction)emailMeMFMailComposeViewControllerin がアニメーション化されますが、部分的なカールの後ろに部分的に隠されます。最初にカールを閉じてからアニメーション化するにはどうすればよいMFMailComposeViewControllerですか?

どうもありがとう!

編集:コメントアウトした場合のビューの下の画像[self dismissViewControllerAnimated:YES completion:^{}];

ここに画像の説明を入力

4

5 に答える 5

1

これについて、

- (IBAction)emailMe:(id)sender {
    [self dismissViewControllerAnimated:YES completion:^{
        [self sendMeMail];
    }];
}

self viewController を閉じた後、self からビュー コントローラーを提示することはできません。

じゃあ何ができる?

1) ボタンの押し方を変える

- (IBAction)emailMe:(id)sender {
    [self sendMeMail];
}

2) mailViewController が却下されたときに、セルフ viewController を却下できます。

- (void)mailComposeController:(MFMailComposeViewController*)controller
          didFinishWithResult:(MFMailComposeResult)result
                        error:(NSError*)error;
{
    if (result == MFMailComposeResultSent) {
        NSLog(@"It's sent!");
    }
    [controller dismissViewControllerAnimated:NO completion:^ {
        [self dismissViewControllerAnimated:YES completion:nil];
    }];

}
于 2013-05-05T11:49:37.263 に答える
0

このコードを使用

[[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:composer                                                                                                    animated:YES completion:nil];

それ以外の

[self presentViewController:picker animated:YES completion:NULL];
于 2014-12-12T05:29:34.640 に答える
0

ストーリーボードを使用している場合は、セグエで使用しているトランジション タイプを確認してください。モーダルに移行するビューコントローラーのレイヤーを閉じる際に問題が発生します。これが問題の原因である可能性があります。代わりにプッシュに切り替えてみてください。ここに画像の説明を入力ViewController を閉じるためにデリゲートを作成することはできますが、実際には必要ありません。これは非常に複雑なソリューションです。数十の異なるストーリーボードに遷移するビューコントローラーがある場合、解任を制御する数十のデリゲートを持つことになりますか? 次善のようです。

于 2013-05-07T03:28:55.780 に答える