2016-04-11 61 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被竊聽模態的視圖。一切都很好,直到這一點。

但是,現在我想更新SecondChildViewController中關於解除ModalViewController的數據。我嘗試做這樣的ModalViewController:

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

不過,我收到以下錯誤:

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

我怎樣才能解決這個問題?所以,具體來說,我怎樣才能得到「真正」呈現ViewController?我知道它有點怪異的導航,並且從用戶體驗的角度來看,堆疊視圖太多,但這是客戶想要實現的方式。

回答

2

我不知道我是否正確理解你的問題。如果你有一個視圖控制器A,呈現視圖控制器B,如果你想調用一個方法,當B被解僱 - 你可以讓B.

的委託

瞭解更多關於協議和委託在這裏: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html

+0

對不起,有任何困惑,但你說得對。我知道我總是可以使用協議/委託機制。但是,這個問題並不罕見。而不是SecondChildViewController實例,我得到UINavigationViewController實例,作爲presentsViewController。有什麼方法可以找到「真正的」presentationViewController嗎?感謝您的回覆!! –

+0

嘗試使用UINavigationViewController.topViewController – Pankaj

+0

不能...那會給我ParentViewController,並且再次需要查找它的子項。截至目前,我已經實施了代表模式。 –