iOS6ではEmbedSegueが導入され、ストーリーボードでカスタムコンテナコントローラーを使用できるようになりました。iOS 5でこれを複製する方法はありますか?
2 に答える
ここでの課題は、子View Controllerのビューが、親ViewControllerのコンテナビューのサブビューとして追加されることが多いことです。ランダムなコントロールからセグエを取得することはできないため、コンテナビューから子のシーンへのUIView
セグエの作成に反対します。UIView
したがって、コードを自分で作成するだけです。
幸い、これは、『View Controllerプログラミングガイド』の「子コントローラーの追加」で参照されている4行のコードだけです。個人的には、View Controllerで次のメソッドを定義して、そのコードを少し変更することもできます。
- (void) displayChildController:(UIViewController*)childController
inContainerView:(UIView *)containerView
{
[self addChildViewController:childController]; // 1
childController.view.frame = containerView.bounds; // 2
[containerView addSubview:childController.view];
[childController didMoveToParentViewController:self]; // 3
}
ただし、アクティブな子コントローラーをあるシーンから次のシーンに変更するためのカスタムセグエを実行しましたが、これは基本的に、上記の参照ドキュメントで後述するコードのバリエーションにすぎません。しかし、それは埋め込まれたセグの質問ではないので、ここでは関係ありません
UIStoryboardSegue をサブクラス化して機能を複製しました。
Interface Builder でカスタム セグエを作成し、そのクラスをサブクラス (QCEmbedSegue) に設定します。親View ControllerのviewDidLoad
で、 を呼び出しますperformSegueWithIdentifier:sender
。
QCEmbedSegue は単純にオーバーライドしますperform
:
- (void)perform
{
[self.sourceViewController addChildViewController:self.destinationViewController];
[[self.sourceViewController view] addSubview:[self.destinationViewController view]];
[self.destinationViewController didMoveToParentViewController:self.sourceViewController];
}