2

mainController私はコントローラーを持っています。それを私のタブボタンに属するものと呼びましょうUITabNarController。今、mainController私は新しいviewControllerをロードし、次のように呼び出しましょうsecondViewController

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 

presentingViewControllerがで応答するのはなぜUITabBarControllerですか?

4

3 に答える 3

2

これは少しハックに感じますが、[(UITabBarController *)self.presentingViewController selectedViewController] を使用して mainController への参照を取得できます。それがうまくいかない場合、またはそのようにしたくない場合は、委任を使用することをお勧めします。

于 2012-10-26T06:34:06.370 に答える
0

mainControllerがプレゼンテーションコンテキストを提供するように設定されておらず、UITabBarControllerのようなものが見つかるまで検索が階層を上っていくためと思われます。

を呼び出す前definesPresentationContextに、でYESに設定してみてください。それでも問題が解決しない場合は、mainControllerpresentViewControllermodalPresentationStyleUIModalPresentationCurrentContext

以下のドキュメントを参照してください。

ビューコントローラまたはその子孫の1つがビューコントローラを提示するときに、このビューコントローラのビューがカバーされるかどうかを示すブール値。

@property(nonatomic、assign)BOOLはPresentationContextを定義します

討論

View Controllerが提示されると、iOSは提示するView Controllerから開始し、プレゼンテーションコンテキストを提供するかどうかを尋ねます。提示するViewControllerがコンテキストを提供しない場合、iOSは提示するViewControllerの親ViewControllerに問い合わせます。iOSは、View Controllerがプレゼンテーションコンテキストを提供するまで、ViewController階層を検索します。ビューコントローラがコンテキストを提供することを提供しない場合、ウィンドウのルートビューコントローラがプレゼンテーションコンテキストを提供します。

ビューコントローラがYESを返す場合、それはプレゼンテーションコンテキストを提供します。ビューコントローラのビューで覆われるウィンドウの部分によって、表示されるビューコントローラのビューのサイズが決まります。このプロパティのデフォルト値はNOです。

于 2012-10-25T22:21:36.270 に答える
0

次の出力は何ですか?

NSLog(@"Presenting View Controller: %@", [self.presentingViewController クラス]);
于 2012-10-25T22:29:53.470 に答える