5

iOS6ではEmbedSegueが導入され、ストーリーボードでカスタムコンテナコントローラーを使用できるようになりました。iOS 5でこれを複製する方法はありますか?

4

2 に答える 2

9

ここでの課題は、子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
}

ただし、アクティブな子コントローラーをあるシーンから次のシーンに変更するためのカスタムセグエを実行しましたが、これは基本的に、上記の参照ドキュメントで後述するコードのバリエーションにすぎません。しかし、それは埋め込まれたセグの質問ではないので、ここでは関係ありません

于 2013-02-05T19:48:27.853 に答える
-1

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

http://www.quentamia.com/blog/embed-segue-in-ios-5/

于 2013-02-05T19:26:46.247 に答える