58

を使用してコンテナビューコントローラを作成しようとしていiOS5ますaddChildViewController

電話addSubviewした後に電話する必要がありaddChildViewControllerますか?

電話をかけるremoveFromSuperview前に電話する必要がありremoveChildViewControllerますか?

Appleドキュメントにはこれについて何も表示されていません。どう思いますか?

4

4 に答える 4

84

1)addChildViewControllerを呼び出した後、addSubviewを呼び出す必要がありますか?

はい

2)removeChildViewControllerを呼び出す前にremoveFromSuperviewを呼び出す必要がありますか?

完全ではありません

removeFromParentViewController:代わりに電話する必要がありremoveChildViewController: ますあなたも電話する必要がありますwillMoveToParentViewController:

追加/削除については、この素晴らしいカテゴリを参照できます:

UIViewController+コンテナ

- (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];

}

developer.apple.comの公式リソース

于 2013-04-20T21:19:26.990 に答える
43

短い答え:「はい、そしてはい。」ビュー階層とビューコントローラ階層は引き続き独立しています。包含APIを使用すると、他のコントローラーからのビューを、親コントローラーのビュー内にクリーンで一貫した方法で表示できます。

ここでAppleのドキュメントを少し見つけることができます...これは「コンテナビューコントローラが他のビューコントローラのコンテンツを配置する」セクションからの関連する一節です。

コンテナは、他のビューコントローラと同じようにビュー階層を管理します。コンテナは、その子のビューをビュー階層に追加することもできます。コンテナーは、そのようなビューをいつ追加するか、およびコンテナーのビュー階層に合わせてサイズを変更する方法を決定しますが、それ以外の場合は、子ビューコントローラーがビューとそのサブビューを担当します。

アクセスできる場合は、「UIViewControllerContainmentの実装」というタイトルのWWDC 2011ビデオをチェックすることを強くお勧めします(Apple Developer Video Archiveからダウンロードしてください)。

于 2012-04-13T18:09:31.943 に答える
3

addChildViewControllerPeterの答えに加えて、以前に呼び出した理由の1つは、が呼び出されaddSubviewたときに子のが呼び出されることでした。場合によっては、その時点で親子階層を適切に設定する必要があります。それが行われない場合、子のviewDidLoadの間、parentViewControllerプロパティはnilになります。addSubviewviewDidLoad

于 2014-09-15T15:33:49.990 に答える
0

以下は、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

これにより、子と親のビューコントローラの関係とそれらの操作方法についてのアイデアが得られます。

于 2019-06-12T06:11:02.883 に答える