将 MFMailComposeViewController 推送到导航堆栈上?未以模态方式呈现

Posted

技术标签:

【中文标题】将 MFMailComposeViewController 推送到导航堆栈上?未以模态方式呈现【英文标题】:Pushing an MFMailComposeViewController onto the navigation stack? Not presented modally 【发布时间】:2011-10-29 06:47:20 【问题描述】:

我有一个表格视图,在其中一个单元格中显示“联系人”。选择此单元格后,我想推入一个 MFMailComposeViewController。

我似乎只能以模态方式呈现这个 MFMailComposeViewController。这里有什么问题?

谢谢!

相关代码片段:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 


    MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];
    //*works*//[self.navigationController presentModalViewController:controller animated:YES];
    //*broken*//[self.navigationController pushViewController:controller animated:YES];

我得到的错误是:" * 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'不支持推送导航控制器' * 在第一次抛出时调用堆栈:"

所以看起来我已经有了一个 navigationController,而且由于 MFMailComposeViewController 是 UINavigationController 的一个子类,我将一个 navController 推到另一个 navController 上?

我希望我的 UI 保持一致,因此我想将 MFMailComposeViewController 推送到导航堆栈上,而不是模态显示它。

【问题讨论】:

在什么方面不起作用?只是没有显示视图,还是出现错误? 【参考方案1】:

这是因为MFMailComposeViewController 不是UIViewController 的子类,而是UINavigationController 的子类。当您尝试将UINavigationControllerUINavigationController 的子类推入现有堆栈时,UINavigationController 会引发异常。允许以模态方式呈现UINavigationController

【讨论】:

好的,那么您是说在表格视图单元格上“向下钻取”时不能调出 MFMailComposeViewController 吗?通过向下钻取,我的意思是您点击一个 tableview 单元格,并且下一个视图控制器不会通过从屏幕底部弹出来以模态方式呈现。我希望 MFMailComposeViewController 从右向左滑入。这么基本的东西肯定支持吗? UINavigationController 旨在操作 UIViewController 对象的层次结构。将另一个 UINavigationController 添加到现有导航堆栈中会产生意想不到的后果。考虑 UINavigationController 提供的 UINavigationBar。如果你要推送一个新的 UINavigationController,应该优先使用哪个导航栏?我想如果你真的需要推送邮件组合视图控制器,你可以使用mailComposeController.topViewController 提取 UIViewController 子类。【参考方案2】:

根据苹果文档

要显示由该视图控制器管理的视图,您可以使用任何标准技术来显示视图控制器

因此,您尝试做的应该在这两种情况下都有效。你看过日志吗?

我敢打赌你的 navigationController 是 nil,因为这通常发生在你使用普通的 UIViewController(没有嵌入到 UINavigationController 中,但你实际上将模态视图呈现到 navigationController 上时,它可能不是 nil。

【讨论】:

以上是关于将 MFMailComposeViewController 推送到导航堆栈上?未以模态方式呈现的主要内容,如果未能解决你的问题,请参考以下文章

如何将thinkcmf导入eclipse

如何将Ios文件上传到

Javascript 将正则表达式 \\n 替换为 \n,将 \\t 替换为 \t,将 \\r 替换为 \r 等等

如何将视频文件转换格式

sh 一个将生成CA的脚本,将CA导入到钥匙串中,然后它将创建一个证书并与CA签名,然后将其导入到

python怎么将0写入文件?