同时关闭一个视图控制器然后呈现一个

Simultaneously dismissing a view controller and then presenting one

所以我有一个 VC 当我点击一个按钮时调用它(它是一个 MFMailComposeViewController)并且当消息被发送时,它关闭 ViewController 并且我希望它在发送完成后呈现一个不同的。但不是这样做,而是每次发送电子邮件后都会崩溃。我知道我做错了什么,但我不确定是什么。

这是我的代码,它关闭并显示新代码。

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

我认为问题出在我使用了 self 但我不确定我用什么来代替它。

尝试将你的 [self presentViewController:_emailConfirmationPage animated:YES completion:nil];} 放入 [self dismissViewControllerAnimated:true completion:nil];completion: 块中,它将在完成后执行 present vc dismiss 另一个 vc

像这样:

[self dismissViewControllerAnimated:YES completion:^{
        [self presentViewController:_emailConfirmationPage animated:YES completion:nil];
    }];

你的代码没有工作,因为它仍然是动画 dismissViewController 并且不能同时有 2 个动画

它正在崩溃,因为您要求关闭和显示动画同时开始。所以你可以通过两种方式解决这个问题:

  1. 等待第一个动画完成后再开始下一个。这将激活当前 VC 的解散并激活新的呈现。当然,用户必须等待两个动画完成才能继续与应用程序交互。为此,在关闭当前 VC 的完成块中呈现 _emailConfirmationPage,如下所示:

    [self dismissViewControllerAnimated:YES completion:^{
        [self presentViewController:_emailConfirmationPage animated:YES completion:nil];
    }];
    
  2. 动画要么消失要么出现,但不能同时出现。这可能会更好,因为用户只需等待 1 个动画,而 1 个动画很可能足以确保流畅的用户体验。

    [self dismissViewControllerAnimated:NO completion:nil];
    [self presentViewController:_emailConfirmationPage animated:YES completion:nil];