Objective c 将MFMailComposeViewController推送到导航堆栈上?不以形式呈现

Objective c 将MFMailComposeViewController推送到导航堆栈上?不以形式呈现,objective-c,ios,uinavigationcontroller,mfmailcomposeviewcontroller,Objective C,Ios,Uinavigationcontroller,Mfmailcomposeviewcontroller,我有一个表格视图,其中一个单元格上写着“联系人”。选择此单元格后,我想插入MFMailComposeViewController 我似乎只能以模态的方式呈现这个MFMailComposeViewController。这里有什么问题 谢谢 相关代码框架: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { MFMailComposeViewContro

我有一个表格视图,其中一个单元格上写着“联系人”。选择此单元格后,我想插入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”而终止应用程序,原因是:“不支持推送导航控制器” *第一次抛出时调用堆栈:

看起来我已经有了导航控制器,既然MFMailComposeViewController是UINavigationController的一个子类,我就把一个导航控制器推到另一个导航控制器上


我希望我的UI保持一致,因此我希望将MFMailComposeViewController推送到nav堆栈上,而不是以模式显示它

根据苹果的文档

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

所以,你要做的应该是在这两种情况下都有效。你看过日志了吗


我敢打赌navigationController为零,因为这通常发生在使用普通UIViewController时(未嵌入
UINavigationController
,但如果您实际将模态视图显示在导航控制器上,它可能不是零。

这是因为
MFMailComposeViewController
不是
UIViewController
的子类,而是
UINavigationController
的子类当您试图将
UINavigationController
UINavigationController
的子类推送到现有堆栈上时,这是一个例外。允许以模式呈现
UINavigationController

以何种方式不起作用?视图只是没有呈现,或者您得到了一个错误?好的,您是说您不能吗“向下钻取”时打开MFMailComposeViewController在tableview单元格上?向下钻取的意思是,点击tableview单元格,下一个视图控制器不会从屏幕底部弹出,而是以模式显示。我希望MFMailComposeViewController从右向左滑入。确实支持这样一个基本的功能吗?UINavigationController旨在操纵UI的层次结构VisualController对象。在现有的导航堆栈中添加另一个UnavigigController会有意想不到的后果。考虑UnavigigController提供的UnavigigBar。如果您要推一个新的UnavigigController,哪个导航条应该优先?我想,如果您真的需要推送邮件COMPOS的话。通过使用
mailComposeController.topViewController
,可以仅提取UIViewController子类。