1

コンテナ API を使用してカスタム コンテナ ビュー コントローラを作成しています

親の ViewDidLoad での親ビュー コントローラーの作成と、子ビュー コントローラーの設定:

[self addChildViewController:newA];
[self addChildViewController:newB];
[self addChildViewController:newC];

これらの childVC が追加されたら、次を使用して移行できます。

[self transitionFromViewController:from
                  toViewController:to
                          duration:1.0
                           options:UIViewAnimationOptionTransitionFlipFromLeft
                        animations:nil
                        completion:^(BOOL b){
                            [to didMoveToParentViewController:self];
                            [from.view removeFromSuperview];
                            [from removeFromParentViewController];
                        }];

私の質問は、現在の子VCを親VCから削除して、新しいVCを表示する必要があるということですか?

                        completion:^(BOOL b){
                            [to didMoveToParentViewController:self];
                            [from.view removeFromSuperview];
                            [from removeFromParentViewController];
                        }

これらの childVC を保持し、単純にスワイプ/ボタン アクションを実行して、これらの childVC 間を移動する方法はありますか?

4

1 に答える 1

1

fromしたがって、 View Controller のビューをビュー階層から手動で削除する必要はありません。このメソッドは、アニメーション ブロックの完了時にそれを処理します。このメソッドのドキュメントから:

このメソッドは、2 番目のビュー コントローラーのビューをビュー階層に追加し、アニメーション ブロックで定義されたアニメーションを実行します。アニメーションが完了すると、ビュー階層から最初のビュー コントローラーのビューが削除されます。

ただし、これに対する注意点として、アニメーション ブロックをNULLコード例のようにすることはできません (そうは言ってもnil、パラメーターはブロックであり、Objective-C オブジェクトNULLではないため、意味がありません)。 animations.

更新:実装によってはviewDidLoad、そのビューのメモリがクリーンアップされると、繰り返し呼び出される場合があります。UITabBarControllerたとえば、通常、VC をタブ バーに追加するときに viewDidLoad のみを呼び出し、その後は viewWill/DidAppear を呼び出すだけです。同様に、ナビゲーション スタックに保持されているため、View Controller にポップしても aUINavigationControllerは呼び出されませんが、VC からポップしてから (通常は) 再度プッシュすると呼び出されます。必要な動作が得られない場合は、コンテナーの実装でこのメソッドをサブクラス化できます。viewDidLoadviewDidLoad

**: 5.0 まで封じ込め API が利用できなかったため、質問から iphone-sdk-4.0 タグを削除しています。

于 2013-01-09T19:40:17.160 に答える