を使用してコンテナビューコントローラを作成しようとしていiOS5
ますaddChildViewController
。
電話addSubview
した後に電話する必要がありaddChildViewController
ますか?
電話をかけるremoveFromSuperview
前に電話する必要がありremoveChildViewController
ますか?
Appleドキュメントにはこれについて何も表示されていません。どう思いますか?
を使用してコンテナビューコントローラを作成しようとしていiOS5
ますaddChildViewController
。
電話addSubview
した後に電話する必要がありaddChildViewController
ますか?
電話をかけるremoveFromSuperview
前に電話する必要がありremoveChildViewController
ますか?
Appleドキュメントにはこれについて何も表示されていません。どう思いますか?
1)addChildViewControllerを呼び出した後、addSubviewを呼び出す必要がありますか?
はい
2)removeChildViewControllerを呼び出す前にremoveFromSuperviewを呼び出す必要がありますか?
完全ではありません
removeFromParentViewController:
代わりに電話する必要がありremoveChildViewController:
ますあなたも電話する必要がありますwillMoveToParentViewController:
追加/削除については、この素晴らしいカテゴリを参照できます:
- (void)containerAddChildViewController:(UIViewController *)childViewController {
[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
[childViewController didMoveToParentViewController:self];
}
- (void)containerRemoveChildViewController:(UIViewController *)childViewController {
[childViewController willMoveToParentViewController:nil];
[childViewController.view removeFromSuperview];
[childViewController removeFromParentViewController];
}
短い答え:「はい、そしてはい。」ビュー階層とビューコントローラ階層は引き続き独立しています。包含APIを使用すると、他のコントローラーからのビューを、親コントローラーのビュー内にクリーンで一貫した方法で表示できます。
ここでAppleのドキュメントを少し見つけることができます...これは「コンテナビューコントローラが他のビューコントローラのコンテンツを配置する」セクションからの関連する一節です。
コンテナは、他のビューコントローラと同じようにビュー階層を管理します。コンテナは、その子のビューをビュー階層に追加することもできます。コンテナーは、そのようなビューをいつ追加するか、およびコンテナーのビュー階層に合わせてサイズを変更する方法を決定しますが、それ以外の場合は、子ビューコントローラーがビューとそのサブビューを担当します。
アクセスできる場合は、「UIViewControllerContainmentの実装」というタイトルのWWDC 2011ビデオをチェックすることを強くお勧めします(Apple Developer Video Archiveからダウンロードしてください)。
addChildViewController
Peterの答えに加えて、以前に呼び出した理由の1つは、が呼び出されaddSubview
たときに子のが呼び出されることでした。場合によっては、その時点で親子階層を適切に設定する必要があります。それが行われない場合、子のviewDidLoadの間、parentViewControllerプロパティはnilになります。addSubview
viewDidLoad
以下は、Appleのドキュメントによって提供される例です。
- (void) displayContentController: (UIViewController*) content {
[self addChildViewController:content];
content.view.frame = [self frameForContentController];
[self.view addSubview:self.currentClientView];
[content didMoveToParentViewController:self];
}
ここに記載されている詳細な説明を確認することもでき ます-https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html
これにより、子と親のビューコントローラの関係とそれらの操作方法についてのアイデアが得られます。