3

私の希望する最終結果に対処するVC封じ込めについても同様の質問がありますが、封じ込めの基本的な概念を明確にするために、この架空の質問をしています。

viewControllerBとviewControllerCを含むメインコントローラーコンテナー(A)があります。ViewControllerBは画面の半分を占め、Cは残りの半分を占めます。

VC Bのボタンを押すと、別のビューコントローラー(D)が画面全体を占めるようになります。

「分割」コントローラーBとCを表示するコードがありますが、viewControllerDを表示する方法を知る必要があります。

私の質問:viewController Dを表示させるコードは何ですか?また、どこから呼び出されますか?

私はこのパターンに関する質問を探すのに数時間を費やしましたが、役に立ちませんでした。私は、VC Aがそれを表示する責任があると想定しています(そうでなければ、画面全体を埋めることができませんでした)、VC Bのボタンには、parentViewControllerを使用するVC Aが含まれます-しかし、私はそれを機能させることができませんでした。

4

2 に答える 2

0

再利用性の理由から、View Controller BおよびC(およびD)は、コンテナーViewControllerとは独立して動作する必要があります。このようにして、コンテナビューコントローラの内外で使用できます。

デリゲートを使用すると、必要なことが可能になります。ビューコントローラーBにデリゲートプロパティを作成し、コンテナービューコントローラー(ビューコントローラーA)をビューコントローラーBのデリゲートに設定します。ボタンが押されたら、デリゲート()にメッセージを送信します。デリゲート([self.delegate buttonPressed])はBが受信します。これで、Bは別の子ビューコントローラー(D)を追加できます。これは、任意の方法で表示できます。

parentViewControllerの使用は機能する可能性がありますが、そのView Controllerを単独で使用することにした場合、このプロパティはnilになる可能性があります。

于 2012-07-20T22:07:59.497 に答える
0

コントローラ B は先に進み、 を呼び出す必要があり-presentViewController:animated:completion:ますself。このメソッドは、メッセージを受信したコントローラーから始めて、YESから返された階層内の最初のビュー コントローラーからモーダルにビュー コントローラーを表示します。-definesPresentationContextコントローラーのビューをコントローラー A に対してフルスクリーンにしたい場合は、そのメソッドをオーバーライドして を返しYESます。

UIViewControllerドキュメントから:

@property(nonatomic, assign) BOOL definesPresentationContext

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

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

于 2012-07-20T22:54:36.587 に答える