2016-04-11 8 views
0

マイアプリのナビゲーションは以下のようなものです却下正確なPresentingViewControllerを取得する方法:は、モーダルビューが

NavigationController ---> RootViewController --(Show Segue)-> SomeViewController --(Show Segue)-> ParentViewController (With ContainerView)

ので、ParentViewControllerはコンテナビューを持っています。 このコンテナビューは、ユーザーの選択に応じて、実行時にプログラムによって作成されます。 だから、基本的にビュー階層は、このようなものです:

ParentViewController (With ContainerView) ---(Embed Segue) --> ContainerViewController --(Custom Segue, for deciding which child to show at runtime) ---> FirstChildViewController/SecondChildViewController

さて、私はボタンがSecondChildViewControllerにタップされるモーダルビューを表示します。この点まではすべてが問題ありません。

しかし、今度は、ModalViewControllerの終了時にSecondChildViewControllerのデータを更新したいと思います。私はこの問題を解決するにはどうすればよい

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController updateList]: unrecognized selector sent to instance 0x127e451b0'

:私は次のエラーを取得しています、

SecondChildViewController *secondChildVC = (SecondChildViewController *)self.presentingViewController; 
[self dismissViewControllerAnimated:YES completion: ^{ [secondChildVC updateList]; }]; 

しかし:私はModalViewControllerでこのようにそれをやってみては?具体的には、どのようにして "本当の" presentingViewControllerを得ることができますか?私はちょっと変わったナビゲーションを知っていますし、ユーザーエクスペリエンスの観点から見るとビューのスタッキングが多すぎますが、これがクライアントの実装方法です。

答えて

2

私はあなたの質問を正しく理解しているかどうかわかりません。あなたはViewControllerをBを提示するのViewController Aを、持っている、とあなたはBが却下されたときにAでメソッドを呼び出したい場合場合 - あなたはB.

のデリゲートがここプロトコルと委任についての詳細を読むことができます: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html

+0

ご迷惑をおかけして申し訳ありませんが、ほとんど正しいです。私は常にプロトコル/委任の仕組みに行くことができることを知っています。しかし、この問題はあまり一般的ではありません。 SecondChildViewControllerインスタンスの代わりに、私はpresentingViewControllerとしてUINavigationViewControllerインスタンスを取得しています。 "本当の" presentingViewControllerを見つける方法はありますか?お返事をありがとうございます!! –

+0

UINavigationViewController.topViewControllerを試してください – Pankaj

+0

いいえ...それは私にParentViewControllerを与え、再びその子を探す必要があります。私は今のところデリゲートパターンを実装しています。 –