2012-10-25 31 views
2

我有一個控制器,我們稱之爲mainController屬於我的UITabNarController中的一個標籤按鈕。現在,內mainController,我打開一個新的viewController,讓我們把它叫做secondViewController像這樣:使用UITabBarController從presentsViewController調用方法

UIStoryboard *storyboard = self.storyboard; 
secondViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"secondViewController"]; 
[self presentViewController:svc animated:YES completion:nil]; 

工作正常。但內secondViewController,我希望從mainController調用一個方法,像這樣:

[((mainController*)self.presentingViewController) aMethod]; 

在過去,我從來沒有使用過的UITabBarController,這工作得很好。不過,現在我得到一個錯誤

[UITabBarController aMethod:]: unrecognized selector sent to instance 

爲什麼presentingViewControllerUITabBarController應對?

回答

0

好像是因爲你的mainController沒有被設置爲提供表示上下文,並且搜索直到找到類似UITabBarController的提供它的東西。

在致電presentViewController之前,嘗試在您的mainController上將definesPresentationContext設置爲YES。 如果不幫助嘗試還設置modalPresentationStyleUIModalPresentationCurrentContext

下面

查看文檔:

一個布爾值,指示此視圖控制器的觀點是否 覆蓋在視圖控制器或其後代的禮物之一一個 視圖控制器。

@屬性(非原子,分配)BOOL definesPresentationContext

討論

當視圖控制器被呈現,iOS的與 呈現視圖控制器開始並詢問它,如果它要提供 表示上下文。如果呈現視圖控制器不提供上下文,則iOS要求呈現視圖控制器的 父視圖控制器。 iOS通過視圖控制器 層級搜索,直到視圖控制器提供演示上下文。如果 沒有視圖控制器提供提供上下文,則窗口的根視圖控制器提供了表示上下文。

如果視圖控制器返回YES,那麼它將提供一個演示文稿 上下文。視圖控制器的 視圖覆蓋的窗口部分決定了呈現的視圖控制器視圖的大小。該屬性的 默認值爲NO。

+0

Hmm'[((mainController *)self.presentingViewController)aMethod];'仍然返回'UITabBarController' –

+0

試着將'modalPresentationStyle'設置爲'UIModalPresentationCurrentContext' –

+0

同樣的問題。它的奇怪,因爲即時通訊做'[self presen ...'這應該是'mainViewController''應該是presentviewconroller –

0

以下是什麼輸出?

NSLog(@"Presenting View controller: %@", [self.presentingViewController class]);
+0

'UITabBarController' –

2

這感覺有點hackish的,但你可以得到與[(*的UITabBarController)self.presentingViewController selectedViewController]引用您的mainController。如果這樣做不起作用,或者你不想這樣做,那麼使用委派是一種方式。

相關問題