我已经实现了MFMailComposeViewController并遇到了问题。
在我的超级视图中,我实施了一个按钮,按下后,会显示应用内电子邮件。 一切正常,直到用户发送或关闭邮件表格。
似乎我需要等待动画(关闭电子邮件表单)才能首先结束,然后才能运行[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的作品,但我不认为这是正确的做法。
答案 0 :(得分:3)
使用presentModalViewController呈现视图控制器:动画:
MailComposerViewController *mailComposer = [[MailComposerViewController alloc] init];
[self presentModalViewController:mailComposer animated:YES];
然后像你一样关闭模态视图
[self dismissModalViewControllerAnimated:YES];
无需添加或删除视图控制器的视图。
答案 1 :(得分: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];
});
或者你可以试试这个:
[self dismissViewControllerAnimated:YES completion:^ { [self.view removeFromSuperview]; }];