Ios 同时关闭视图控制器,然后显示一个
因此,我有一个VC,我在点击按钮时调用它(它是一个MFMailComposeViewController),当消息被发送时,它会关闭ViewController,我希望它在发送完成后显示一个不同的控件。但不是这样做,而是在每次发送电子邮件后崩溃。我知道我做错了什么,但我不知道是什么 这是我的代码,它驳回并呈现了新代码Ios 同时关闭视图控制器,然后显示一个,ios,objective-c,uiviewcontroller,viewcontroller,Ios,Objective C,Uiviewcontroller,Viewcontroller,因此,我有一个VC,我在点击按钮时调用它(它是一个MFMailComposeViewController),当消息被发送时,它会关闭ViewController,我希望它在发送完成后显示一个不同的控件。但不是这样做,而是在每次发送电子邮件后崩溃。我知道我做错了什么,但我不知道是什么 这是我的代码,它驳回并呈现了新代码 - (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResu
- (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];}代码>进入完成:
块,在[自解除视图控制器激活:真正完成:无]代码>,它将在完成关闭另一个vc后执行当前vc
像这样:
[self dismissViewControllerAnimated:YES completion:^{
[self presentViewController:_emailConfirmationPage animated:YES completion:nil];
}];
您的代码无法工作,因为它仍在设置动画dismissViewController
,并且不能同时有两个动画它正在崩溃,因为您要求同时启动dismise和present动画。因此,您可以通过两种方式解决此问题:
等待第一个动画完成,然后再开始下一个动画。这将使当前VC的解雇和新VC的演示变得生动。当然,用户必须等待两个动画完成后才能继续与应用程序交互。为此,请在解除当前VC的完成块中显示\u 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];
我有点困惑。我将如何设置[自我解除视图控制器激活:真正完成:零];进入[self-presentViewController:_emailConfirmationPage动画:是完成:无];?你把它放在nil
部分的block
格式中,请看我的编辑,这不应该是另一种方式吗?我不想让它在视图控制器被解除后显示它吗?啊,因为我看到你先使用解除
,然后你只调用当前
?,但这只是个想法,你可以按你想要的方式恢复它:我直到现在才意识到,但我的应用程序仍然崩溃。也没有什么真正改变。