4

私はテーブルビューを持ち、セルの1つに「連絡先」と書いてあります。このセルを選択すると、私はMFMailComposeViewControllerをプッシュしたいと思います。MFMailComposeViewControllerをナビゲーションスタックにプッシュしますか?モーダルではありません

私は、このMFMailComposeViewControllerをモーダルでしか提示できないようです。ここでの問題は何ですか?

ありがとうございます!

関連するコードのfrag:

- (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'、理由にアプリを終了*:「ナビゲーションコントローラをプッシュがサポートされていません。 ' *最初のスローでコールスタック: "

私は既にnavControllerを持っているようですが、MFMailComposeViewControllerはUINのサブクラスなのでavController、私は別のnavControllerにnavControllerをプッシュしていますか?

私のUIに一貫性を持たせたいので、モーダルで提示するのではなく、MFMailComposeViewControllerをnavスタックにプッシュしたいと思います。

+0

どのようにして動作しないのですか?ビューは表示されません、またはエラーが表示されますか? – jrturton

答えて

3

MFMailComposeViewControllerUIViewControllerのが、UINavigationControllerのサブクラスではないためです。あなたは、既存のスタックにUINavigationControllerUINavigationControllerまたはサブクラスをプッシュしようとしているときUINavigationControllerが例外をスローします。モーダル許可されているUINavigationControllerを提示する。

+0

これで、テーブルビューのセルをドリルダウンするときにMFMailComposeViewControllerを表示できないと言っていますか?ドリルダウンすると、テーブルビューのセルをタップし、次のビューコントローラが画面の下部からポップアップしてモーダルで表示されないことを意味します。 MFMailComposeViewControllerを右から左へスライドさせたい。確かにそのような基本的なことがサポートされていますか? – user798719

+0

UINavigationControllerは、UIViewControllerオブジェクトの階層を操作するように設計されています。既存のナビゲーションスタックに別のUINavigationControllerを追加すると、予期しない結果が発生します。 UINavigationControllerが提供するUINavigationBarについて考えてみましょう。新しいUINavigationControllerを使用する場合、どのナビゲーションバーが優先されるべきですか?私はあなたが実際に 'mailComposeController.topViewController'を使ってUIViewControllerサブクラスだけを抽出できるメールコンポジションビューコントローラをプッシュする必要があると思います。 –

0

アップルのドキュメントによると

このビューコントローラによって管理ビューを表示するには、

だから何をやろうとしていることであるView Controllerを表示するための標準的な技術のいずれかを使用することができますどちらの場合でも動作するはずです。あなたはログを見ましたか?

私はあなたがUINavigationControllerに埋め込まれていない無地のUIViewControllerを(使用しているとき、これは一般的に起こるので、あなたのnavigationControllerは、nilであるが、それはあなたが実際に、それはゼロではないかもしれないnavigationControllerにあなたのモーダルビューを提示賭けているだろう。

関連する問題