同时关闭一个视图控制器然后呈现一个
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 个动画
它正在崩溃,因为您要求关闭和显示动画同时开始。所以你可以通过两种方式解决这个问题:
等待第一个动画完成后再开始下一个。这将激活当前 VC 的解散并激活新的呈现。当然,用户必须等待两个动画完成才能继续与应用程序交互。为此,在关闭当前 VC 的完成块中呈现 _emailConfirmationPage
,如下所示:
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:_emailConfirmationPage animated:YES completion:nil];
}];
动画要么消失要么出现,但不能同时出现。这可能会更好,因为用户只需等待 1 个动画,而 1 个动画很可能足以确保流畅的用户体验。
[self dismissViewControllerAnimated:NO completion:nil];
[self presentViewController:_emailConfirmationPage animated:YES completion:nil];
所以我有一个 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 个动画
它正在崩溃,因为您要求关闭和显示动画同时开始。所以你可以通过两种方式解决这个问题:
等待第一个动画完成后再开始下一个。这将激活当前 VC 的解散并激活新的呈现。当然,用户必须等待两个动画完成才能继续与应用程序交互。为此,在关闭当前 VC 的完成块中呈现
_emailConfirmationPage
,如下所示:[self dismissViewControllerAnimated:YES completion:^{ [self presentViewController:_emailConfirmationPage animated:YES completion:nil]; }];
动画要么消失要么出现,但不能同时出现。这可能会更好,因为用户只需等待 1 个动画,而 1 个动画很可能足以确保流畅的用户体验。
[self dismissViewControllerAnimated:NO completion:nil]; [self presentViewController:_emailConfirmationPage animated:YES completion:nil];