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,它可能不會是零。