8

コードから2つのView Controller間の親子関係を作成するには、基本的に次のようなことをするだけです:

[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];

ここで、selfは親ビュー コントローラーです。
しかし、Interface Builder から完全に同じ関係を作成したい場合はどうすればよいでしょうか?
言い換えれば、Interface Builder を使用してメソッド addChildViewController の動作を再作成する方法はありますか?
それに関するドキュメントはあまり見つかりませんでした。このトピックに関する古い未解決の投稿があります: https://devforums.apple.com/message/455758#455758

addChildViewController 関係を適切に設定しないと、私の質問の元である子ビュー コントローラーに回転メソッドが転送されません。

これは私がIBで行ったことです:

  1. 「View Controller」オブジェクトを「Object Library」パネルから「Objects」パネルにドラッグ アンド ドロップします。
  2. ID インスペクターで、そのクラスを UIViewController サブクラス ("Items View Controller") に変更しました。
  3. ビューアウトレットをコントローラーに接続しました
  4. 他のすべての必要なコンセントをコントローラーに接続しました (リスト名、テーブル ビュー)

写真の最初の「ビュー」オブジェクトは、親ビュー コントローラーのビューです。代わりに、強調表示された「ビュー」は、子ビュー コントローラー (「アイテム ビュー コントローラー」) のビューです。

ここに画像の説明を入力

コンテナー コントローラーは、追加の IBOutlet を介して子インスタンスも保持します。

@property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController;

ありがとう


更新 1:コンテナー コントローラーの viewDidLoad で親子関係を手動で設定すると、すべての回転メソッドが子に正しく転送されます。

[self addChildViewController:self.itemsViewController];

しかし、IBを使用してすべてを行いたいので、これが正しい方法であるかどうかはよくわかりません。


更新 2:オブジェクト ライブラリで「コンテナー ビュー」を使用するためのヒントをくれた @micantox に感謝します。xib ファイルをストーリーボードに変換したところ、子ビュー コントローラーが親に追加されたので、その必要はありません。 addChildViewController を使用してコードから手動で追加すると、回転メソッドが期待どおりに転送されます。
「コンテナ ビュー」は基本的に埋め込みセグエを実装し、iOS 6 からのみサポートされます。
これは、ストーリーボードの更新されたスクリーンショットです。

ここに画像の説明を入力

4

3 に答える 3

2

Also, if you're trying to create an embed segue to an existing view controller in your storyboard, control-drag from the container view, not the container VC, to the VC you want to embed.

于 2013-12-05T18:51:09.590 に答える
0

これを行う非常に簡単な方法は、ストーリーボード ID を参照して子ビュー コントローラーをインスタンス化することです。

UITableViewController *childViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"childViewController"];

[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];

そうすれば、インターフェイス ビルダーで両方のビュー コントローラーをビルドできます。インターフェイス ビルダーでストーリーボード ID を設定できます。ビュー コントローラーを選択すると、ID インスペクターにそのフィールドが表示されます。

于 2015-04-28T17:45:44.237 に答える