4

我有一个表格视图,并在其中一个单元格中,它说“联系”。选择这个单元格后,我想推入一个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是UIN的子类avigationController,我推navController到另一个navController?

我希望我的UI保持一致,所以我想将一个MFMailComposeViewController推到导航堆栈上,而不是以模态方式呈现它。

+0

它以什么方式不起作用?视图只是没有出现,或者你得到一个错误? – jrturton

回答

3

这是因为MFMailComposeViewController不是UIViewControllerUINavigationController一个子类。UINavigationController抛出当你试图的UINavigationController一个UINavigationController或子推到一个现有的堆栈。呈现UINavigationController模态是允许的例外。

+0

好吧,那么你是说当你在tableview单元格上“钻取”的时候你不能调出一个MFMailComposeViewController?通过深入研究,我的意思是点击桌面单元格,并且下一个视图控制器不会通过从屏幕底部弹出而以模态方式呈现。我希望MFMailComposeViewController从右向左滑动。这种基本的东西当然是支持的吗? – user798719

+0

UINavigationController设计用于处理UIViewController对象的层次结构。将另一个UINavigationController添加到现有的导航堆栈中会产生意想不到的后果。考虑UINavigationController提供的UINavigationBar。如果您要推入新的UINavigationController,哪个导航栏应该优先?我想如果你真的需要推送邮件组合视图控制器,你可以使用'mailComposeController.topViewController'来提取UIViewController子类。 –

0

根据苹果文档

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

那么你正在尝试做的是应该在这两种情况下工作。你有没有看过日志?

我会打赌你navigationController是零,因为这时候你使用的是普通的UIViewController(不嵌入UINavigationController通常发生,但你实际存在的模式视图到navigationController,它可能不会是零。