我有一个表视图,在其中一个单元格中,它表示“联系”。选择这个单元格后,我想推入一个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推送到导航堆栈而不是以模态方式呈现它。
答案 0 :(得分:3)
这是因为MFMailComposeViewController
不是UIViewController
的子类,而是UINavigationController
的子类。当您尝试将UINavigationController
或UINavigationController
的子类推送到现有堆栈时,UINavigationController
会引发异常。允许以模态方式呈现UINavigationController
。
答案 1 :(得分:0)
根据Apple文档
要显示此视图控制器管理的视图,您可以使用任何标准技术来显示视图控制器
所以你要做的事情应该适用于这两种情况。你看过日志了吗?
我敢打赌你的navigationController是nil,因为这通常发生在你使用普通的UIViewController(没有嵌入UINavigationController
)时,但实际上你将你的模态视图呈现在navigationController上,它可能不是没有。