来自 NSObject 类的 MFMailComposeViewController 显示问题 - iOS
Posted
技术标签:
【中文标题】来自 NSObject 类的 MFMailComposeViewController 显示问题 - iOS【英文标题】:MFMailComposeViewController Display Issue from NSObject Class - iOS 【发布时间】:2014-08-27 16:57:25 【问题描述】:我在尝试从 NSObject 类实现时遇到 MFMailComposeViewController 的问题。
我已经多次使用 MFMailComposeViewController 没有问题,但总是在视图控制器中。
但是,在这种情况下,我调用了一个将运行的 NSObject 类,而用户通常在一个 ViewController 上。但是,这段代码是从多个视图控制器运行的,因此使用了 NSObject,并且我需要允许作曲家在任何视图控制器上呈现。
问题是完成后,它需要抛出一个电子邮件编辑器,而我无法让它工作。相反,它从不启动 Mail Composer 视图。
我有委托,代码如下,委托在 .h 中设置。
MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
if([MFMailComposeViewController canSendMail])
mc.mailComposeDelegate = self;
[mc setSubject:emailTitle];
[mc setMessageBody:messageBody ishtml:NO];
[mc setToRecipients:toRecipents];
[[mc navigationBar] setTintColor: [UIColor whiteColor]]; // Text color
// Present mail view controller on screen
[self presentViewController:mc animated:YES completion:^
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
];
- (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
switch (result)
case MFMailComposeResultCancelled:
// NSLog(@"Mail cancelled");
break;
case MFMailComposeResultSaved:
// NSLog(@"Mail saved");
break;
case MFMailComposeResultSent:
// NSLog(@"Mail sent");
break;
case MFMailComposeResultFailed:
// NSLog(@"Mail sent failure: %@", [error localizedDescription]);
break;
default:
break;
// Close the Mail Interface
[self dismissViewControllerAnimated:YES completion:NULL];
我还尝试将代码转移到 AppDelegate,并使用来自 NSObject 类的通知来触发作曲家,但是,使用此方法我发现作曲家将显示在推送的 VC 上,但如果是模态视图当前显示,它不显示作曲家。
最后,我尝试添加一个完全独立的视图控制器,向其中添加邮件编写器,然后通过 AppDelegate 添加它,但这也只会显示在推送的 VC 上,而不是模态 VC。
我的想法是我需要找到导航堆栈的“顶部”,以便在其上方显示作曲家,但我不是 100% 确定。
我会欢迎任何能够阐明我如何实现这一点的人的 cmets,因为我确信这一定是可能的,因为如果代码在View Controller 本身,但显然这意味着我需要将这样的代码添加到多个 VC 中,虽然我可以,但这似乎是一种必须继续的奇怪方式。
谢谢大家!
【问题讨论】:
【参考方案1】:我以为我会回来回答这个问题!
MFMailComposeViewController 必须在 ViewController 中启动。这是设计使然。
【讨论】:
我刚才碰到了这个问题,预感就是问题所在。感谢您发布后续消息以确认我的怀疑。以上是关于来自 NSObject 类的 MFMailComposeViewController 显示问题 - iOS的主要内容,如果未能解决你的问题,请参考以下文章
处理来自另一个类的 CLLocationManager 委托
为啥我们不能在不从 NSObject 继承类的情况下迅速采用协议?