なぜ、いつコンテナー ビューを使用する必要があるのか、私は混乱しています。また、コンテナ ビューをコードでインスタンス化するにはどうすればよいでしょうか。
2 に答える
コンテナー ビューは、ストーリーボードに既にあるビュー コントローラーの 1 つにドラッグできるビューです (これを viewControllerA と呼びます)。埋め込みセグエを介して、このビューに接続されたビュー コントローラーを自動的に取得します。この新しいView Controllerにはフレームが設定されているため、コンテナ ビューと同じサイズになります。コンテナ ビューのサイズを変更すると、コントローラも自動的にサイズ変更されます。したがって、必要に応じて、複数のコンテナー ビューを viewControllerA にドラッグすると、それぞれに独自のビュー コントローラーが作成されます。コードでは、これらの埋め込みビュー コントローラーにアクセスする必要がある場合は、viewControllerA.childViewControllers からアクセスできます。これにより、所有している埋め込みビュー コントローラーの配列が得られます。
これらのコンテナー ビューについては、WWDC 2012 セッション ビデオ ビデオ「Adopting Storyboards in Your App」に説明があります。
なぜ、いつコンテナー ビューを使用する必要があるのか、私は混乱しています。
人々がコンテナ ビューについて話すとき、それらは通常、他のビューを含む単純な古い UIView を意味します。このようにビューを使用すると、ビューに含まれるすべてのビューをグループとして移動できるため、相互の相対的な位置が維持されます。また、含まれているすべてのビューをグループとして簡単に非表示にすることもできます。
また、コンテナ ビューをコードでインスタンス化するにはどうすればよいでしょうか。
通常、コードから UIView をインスタンス化するのと同じ方法:
CGRect frame = CGRectMake(someX, someY, someWidth, someHeight);
UIView *container = [[UIView alloc] initWithFrame:frame];
その後、おそらくいくつかのサブビューをコンテナーに追加し、最終的にコンテナーをビュー コントローラーのビューのサブビューとして追加します。
また、ここではビューについて話しているのであって、ビューコントローラーについて話しているわけではないことに注意してください。コンテナ ビュー コントローラーについても言及されています。これは、他のビュー コントローラーを管理できるビュー コントローラーを意味します。UITabBarController、UINavigationController、および UISplitViewController は、iOS によって提供されるコンテナー ビュー コントローラーの例です。必要に応じて独自のものを作成できますが、それは別の質問のトピックです。
更新:あなたのコメントから、ストーリーボード エディターの [コンテナー ビュー] 項目について疑問に思っているようです。1 つをビューにドラッグすると、次のように表示されます。
ビュー自体は、プレースホルダーとして使用される UIView です。
ビューとともに、エディターは子ビュー コントローラーによって管理されるコンテンツを編集できる領域を作成します。下の図を参照してください。
これは 1 つのオブジェクトだけではなく、複数のオブジェクトです。ビュー、子ビュー コントローラー、および「埋め込み」セグエを取得します。コードでそれらを作成し、必要に応じて適切に接続することもできます。