30

tableViewController を containerViewController の子ビュー コントローラーとして追加したいと考えています (以下を参照)。Apple のView Controller Programming Guideによると、containerViewController 内の次のコード行でこれを実現できます。

   [self addChildViewController:tableViewController];
   [self.view addSubview:tableViewController.view];
   [tableViewController didMoveToParentViewController:self];

実際、それはうまくいきます。問題は、tableViewController のビューを containerViewController のルート ビューのサブビューとして追加したくないことです。代わりに、containerViewController のルート ビューのサブビューである containerView (画像を参照) のサブビューとして追加したいと考えています。そこで、上記のコードを次のように変更しました。

   [self addChildViewController:tableViewController];
   [self.contentView addSubview:tableViewController.view];
   [tableViewController didMoveToParentViewController:self];

アプリを起動すると、次のエラーですぐにクラッシュします。

キャッチされない例外「UIViewControllerHierarchyInconsistency」が原因でアプリを終了しています。理由:「子ビュー コントローラー: 親ビュー コントローラーが必要ですが、実際の親は:」です。

ここで何が問題なのですか?childViewController のビューをその containerViewController の特定のサブビューに追加することはできません? または、View Controller階層でエラーなしでこれを達成するにはどうすればよいですか?

containerViewController

4

3 に答える 3

49

子 viewController をどのビューに追加するかは問題ではありません。viewController のビューが別の viewController に追加される場合は、適切に設定する必要があります。

tableViewController.view.frame = self.contentView.bounds;
[self.contentView addSubview:tableViewController.view];
/*Calling the addChildViewController: method also calls 
the child’s willMoveToParentViewController: method automatically */
[self addChildViewController:tableViewController];
[tableViewController didMoveToParentViewController:self];

ソースコード

于 2013-06-09T17:46:46.983 に答える