2017-11-23 19 views
0

Iv'eは非常に奇妙な何かに気づいた、私はIBでビュー階層に子VCを追加する際に階層がこの違いコードで子供VCを追加したり、IB

親VCビュー
のように見えます - -containerビュー
- - - -child VCビュー

手でそれを追加すること

親VCビュー
- - 子VCビュー

私は

- (void) hideContentController: (UIViewController*) content { 
    [content willMoveToParentViewController:nil]; 
    [content.view removeFromSuperview]; 
    [content removeFromParentViewController]; 
} 

コンテナビューを呼び出すようにしようとしていたときに彼らのguideでリンゴからの指示、後

、彼らは例えば、しかし実際のコードで、階層の一部としてコンテナビューについて話すことはありません私のビュー階層を「汚染」しています。私はその容器と私の子供の関係を理解し​​ていませんVC

私のコードで実用的な例は、私がUIStackViewでこれらviewControllersを入れて、Embed Segueで挿入されたUIViewControllerを削除しようとしたとき、私はファントムビューに残っていることです。そのビューにアクセスするための唯一の方法は、ストーリーボードのIBOutletです。

誰もがIBを付けたChildViewControllersの取り扱い、交換または取り外しでの経験がありますか?または、違いがどこから来ているのか、どうやってそれを取り除くのか説明できますか?

答えて

0

私はあなたがIBで使用できる「コンテナビュー」はちょっと違うと言います。

オブジェクトライブラリペインで選択すると、情報ポップアップが表示され、UIContainerViewと表示されます。しかし、Appleのマニュアルを検索すると、それはどこにも見つかりません。

そして、あなたはおそらく、あなたがIBOutletとそれを接続した場合、それはUIViewとして設定されます、気づいたとして....そしてあなたのような何かをしようとした場合:

UIContainerView *vc; 

または

let cv: UIContainerView? 

「宣言されていない型の使用」エラーが発生します。

IBがどのように動作するかと、埋め込まれたチャイルドビューコントローラの自動「読み込みと表示」だけです。これはSeguesによく似ています...あなたはIBで作成して見ることができます。それらにプロパティを割り当てることができます。実行時に彼らは目的を持っている/行動を取る。しかし...コード内にUISegueを作成することはできません。

IBの "コンテナビュー"の視覚的なデザインと埋め込みの自動化を使用する場合は、ビュー階層にUIViewとして追加されていることに注意する必要があります。.viewそのembedded VCはというサブビューとして追加されます ...それを削除する(またはサイズを変更する、または他のプロパティを変更する)場合は、IBOutletを使用して実行時に参照する必要があります)。

あなたが見る「コードのみ」子ビューコントローラの実装、あなたは一般的には、「メイン」ビュー(または他のビュー)のサブビューとして子供VCのビューを追加するためのコードを参照してください。あなたがIBで使用できるUIContainerViewには関係していないように見えます。

それは意味がありますか?

関連する問題