将MFMailComposeViewController推送到导航堆栈?没有以模态呈现

时间:2011-10-29 06:47:20

标签: objective-c ios uinavigationcontroller mfmailcomposeviewcontroller

我有一个表视图,在其中一个单元格中,它表示“联系”。选择这个单元格后,我想推入一个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推送到导航堆栈而不是以模态方式呈现它。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

根据Apple文档

  

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

所以你要做的事情应该适用于这两种情况。你看过日志了吗?

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

相关问题