:)

0

はのは、以下のViewControllerBに移行する前に起こるViewControllerAUIButtonのタップ上のことを言ってみましょう::)

- (IBAction)levelSelectButton:(id)sender { 
    ViewControllerB* obj = [[ViewControllerB alloc] init]; 
    [self addChildViewController:obj]; 
    CGSize screenSize = [MainScreen screen]; 
    CGFloat screenWidth = screenSize.width; 
    CGFloat screenHeight = screenSize.height; 
    obj.view.frame = CGRectMake(0,0,screenWidth,screenHeight); 
    [obj.view addSubview:_banner]; 

    //[obj didMoveToParentViewController:self]; 
    [self runPushAnimationWithController:obj]; 
} 

ViewControllerBが現れたとき、私は私を見ることができます_banner(オブジェクト)が表示されますが、私がViewControllerAに戻ったときにはもう存在しません。

これが期待されている場合ので、私は知らない前に、私はaddChildViewController:/didMoveToParentViewController:メソッドを使用したことがないが、私はまだ目に見える_bannerViewControllerAに戻ることができるようにしたいです。

私はそれを保持する必要がありますか?

+0

ボタンクリックイベントでは正確に何をしますか? 自分のビューコントローラ内で別のビューコントローラを開くのと同じですか?またはカスタムのトランジションアニメーションでView Controllerをプッシュしたいだけですか? –

答えて

0

ビューは1つのスーパービューにのみ属することができます。アップルのドキュメントを引用するには:

ビューにはスーパービューが1つしかない場合があります。ビューにすでにスーパービューがあり、そのビューが受信者ではない の場合、このメソッドは受信者を新しいスーパービューにする前に、以前の スーパービューを削除します。

したがって、新しく作成した親ビューコントローラにビューを追加すると、現在のビューコントローラのビュー階層からビューが削除されます。

私はこの種のことをすることをお勧めします。両方の場所でビューのコピーを作成するだけです。大量のデータを使用する場合、ビューコントローラ間でデータ(モデル)を共有しますが、ビューオブジェクトは共有しません。

ビューコントローラ間でビューを移動する際に完全に設定されている場合は、新しいビューコントローラにプロパティを追加し、他のビューコントローラのビュー階層を操作するのではなくそのプロパティを設定します。また、現在のView Controllerに戻るときに、ビューBACKを渡す必要があります。

ビューコントローラのビュー階層をプライベートとして扱う必要があります。カプセル化の原則に違反することはありません。

+0

おかげさまでDuncanがお役に立てれば、2つのコントローラ間の親子関係全体をスクラップすることになりました(また、他のすべてのコントローラも同様です)。 –

+0

親子関係は非常に便利ですが、正しく使用しているとは思いません。コンテナのビューと埋め込みセグを見てください。 –

+0

それは私がやっていると思ったことです、あるいは少なくとも正しく適用しています。私はStoryboardsやXibファイルを扱っていないので、私はプログラム的にすべてをやっています。全体として私が望むのは、 '_banner'がコンテナビューであった2つのコントローラの間に埋め込みセグを持つことでした(記事[link] https://spin.atomicobject.com/2015/07/21/ios-container-views/sums up) –