MFMailComposeViewController 不会出现在 iOS8
MFMailComposeViewController won't appear in iOS8
我有一个 objective C 程序,它有一个带有日期列表的弹出窗口和两个按钮 "Done" 和 "Cancel"。当用户点击一个日期然后点击完成按钮时,弹出窗口应该会消失,并且应该会出现一个填充了该日期数据的 MFMailViewController window。
当我 运行 iPad 上的程序 iOS 7 时,一切正常 - 弹出窗口消失,邮件视图出现并填充了数据。当我 运行 它在 iPad 和 iOS 8.1 上时,弹出窗口消失但邮件视图没有出现。
使用 NSLog 输出,我知道 iPad 可以发送电子邮件,正确的日期到达方法,MFMailViewController 对象确实存在,并且它越过了应该显示控制器的行.但是控制器没有出现
我们将不胜感激,因为大量的网络搜索都没有找到任何帮助。
方法的结尾是:
NSLog(@"about to present the mail view");
if ([MFMailComposeViewController canSendMail] == YES){
NSLog(@"can it email YES");
}
else {
NSLog(@"can it email NO");
}
NSLog(@"the picker is %@",picker);
[self presentViewController:picker animated:NO completion:NULL];
NSLog(@"leaving method EmailDataFiles");
此代码的输出是:
about to present the mail view
can it email YES
the picker is <MFMailComposeViewController: 0x1616ac00>
leaving method EmailDataFiles
我不知道你是如何初始化选择器对象的,但这对我有用,放在你的 if 条件中:
if ([MFMailComposeViewController canSendMail] == YES){
NSLog(@"can it email YES");
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
mailViewController.mailComposeDelegate = self;
[mailViewController setSubject:@"Subject"];
[mailViewController setMessageBody:@"" isHTML:NO];
mailViewController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:mailViewController animated:YES];
}
我认为这是一个竞争条件.. popoverController 的 doneButton-action 上的 dismissPopover 和选择器的 presentViewController 发生冲突..
如果以下选项适合您,您可以试试吗?
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self presentViewController:picker animated:NO completion:NULL];
});
我有一个 objective C 程序,它有一个带有日期列表的弹出窗口和两个按钮 "Done" 和 "Cancel"。当用户点击一个日期然后点击完成按钮时,弹出窗口应该会消失,并且应该会出现一个填充了该日期数据的 MFMailViewController window。
当我 运行 iPad 上的程序 iOS 7 时,一切正常 - 弹出窗口消失,邮件视图出现并填充了数据。当我 运行 它在 iPad 和 iOS 8.1 上时,弹出窗口消失但邮件视图没有出现。
使用 NSLog 输出,我知道 iPad 可以发送电子邮件,正确的日期到达方法,MFMailViewController 对象确实存在,并且它越过了应该显示控制器的行.但是控制器没有出现
我们将不胜感激,因为大量的网络搜索都没有找到任何帮助。
方法的结尾是:
NSLog(@"about to present the mail view");
if ([MFMailComposeViewController canSendMail] == YES){
NSLog(@"can it email YES");
}
else {
NSLog(@"can it email NO");
}
NSLog(@"the picker is %@",picker);
[self presentViewController:picker animated:NO completion:NULL];
NSLog(@"leaving method EmailDataFiles");
此代码的输出是:
about to present the mail view
can it email YES
the picker is <MFMailComposeViewController: 0x1616ac00>
leaving method EmailDataFiles
我不知道你是如何初始化选择器对象的,但这对我有用,放在你的 if 条件中:
if ([MFMailComposeViewController canSendMail] == YES){
NSLog(@"can it email YES");
MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
mailViewController.mailComposeDelegate = self;
[mailViewController setSubject:@"Subject"];
[mailViewController setMessageBody:@"" isHTML:NO];
mailViewController.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentModalViewController:mailViewController animated:YES];
}
我认为这是一个竞争条件.. popoverController 的 doneButton-action 上的 dismissPopover 和选择器的 presentViewController 发生冲突..
如果以下选项适合您,您可以试试吗?
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self presentViewController:picker animated:NO completion:NULL];
});