57

子ビュー コントローラーをストーリーボードのカスタム コンテナー ビュー コントローラーに関連付けることはできますか?

子ビュー コントローラーをタブ ビュー コントローラーにリンクし、1 つのビュー コントローラーをナビゲーション コントローラーにリンクできます。

子 VC を受け入れるには、コンテナー VC に対して何をする必要がありますか?

4

5 に答える 5

76

カレブとマットの答えの組み合わせのようなものとして、私はしました:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"cpdc_check_embed"]) {
        self.checkVC = segue.destinationViewController;
    }
}

...checkVCはコンテナ コントローラのプロパティです。

@property (weak,nonatomic) PXPCheckViewController * checkVC;

embedセグエを好きなように設定するだけStoryboard IDです(この場合はcpdc_check_embed):

Xcodeで埋め込み画面を確認する

...そして で識別子を確認し-prepareForSegue:sender:ます。

まだアウトレットではありませんが、Matt (IMHO) よりもクリーンで、Caleb よりも具体的であり、見栄えの良いストーリーボードが得られます。

ここに画像の説明を入力

于 2012-09-05T15:04:44.943 に答える
15

ストーリーボードは、組み込みのコンテナー ビュー コントローラーを非常にうまく処理し、関係が明確に示されるように、子/ルート ビュー コントローラーへのセグエを表示します。子と親のView Controllerが異なるシーンに分かれているのもいいですね。

自分のプロジェクトでこの効果を実現したい場合は、完璧ではありませんが非常に簡単なトリックがあります。私の例では、「左」と「右」の 2 つのタブしかないタブ バー コントローラーのように機能するコンテナー ビュー コントローラーがあるとします。親ビュー コントローラーを表すシーンを作成し、「左」の子ビュー コントローラーと「右」の子ビュー コントローラーの両方を表す 2 つの別個のシーンを作成したいと考えています。

無理ですが、別のシーンでコンテナView Controllerからその子に を作成し、コンテナView Controllerが表示されたときに、 UIViewControllerIBOutletに記載されているルールに従って親子関係を設定できればいいのにと思いますドキュメンテーション。「左」および「右」の子ビュー コントローラーへの参照があれば、問題なく関係を設定できます。

この参照の問題に対する標準的な解決策は、Objectアウトレットをコンテナー ビュー コントローラーのシーンにドラッグして子ビュー コントローラーへの参照を作成し、そのクラス タイプを子ビュー コントローラー クラスのインスタンスとして指定することです。

ただし、Apple のビルトイン コンテナーのように、さまざまなシーンで子供たちを分離しておくために、別のトリックを使用します。まず、コンテナ クラスで次のプロパティが宣言されているとしますContainerViewController

@property (nonatomic, strong, readwrite) UIViewController *leftViewController;
@property (nonatomic, strong, readwrite) UIViewController *rightViewController;

ストーリーボードで、「左」ビュー コントローラーを表すシーンを選択します。属性インスペクタで、View Controller のidentifierプロパティを"cvc_leftViewController"(「cvc_」は を指しますContainerViewControllerが、実際には識別子は任意のものにできます) に設定します。右側のビュー コントローラーのシーンについても同じことを行い、その識別子を に設定し"cvc_rightViewController"ます。

ContainerViewController次のコードをのviewDidLoadメソッドに挿入します。

if (self.storyboard) {
    _leftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"cvc_leftViewController"];
    _rightViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"cvc_rightViewController"];
}

ContainerViewControllerストーリーボードから読み込まれると、それぞれのシーンから「左」と「右」のビュー コントローラーを取得し、そのプロパティを介してそれらへの参照を設定します。子View Controllerインスタンスを制御できるようになったので、親子関係を自由に設定できます。それを適切に行う方法については、UIViewController のドキュメントを参照してください。

このトリックは完璧ではなく、多くの注意点がありますが、注意すればプロジェクトでうまく機能させることができます。

編集: これは完全に不要であり、何の意味もありませんが、Apple の組み込みコンテナーと同様に、コンテナーから子ビュー コントローラーへのストーリーボード表示接続が本当に必要な場合は、上記の私の方法を使用してからセットアップしてください。コンテナ シーンと子シーンの間を直接セグエし、単にそれらのセグエを実行しないでください。これですべてが正しく機能し、見栄えも良くなります。

于 2012-07-03T18:09:34.950 に答える
5

1 つのシーンで複数のコントローラーを使用するための鍵 (ここにいると思います) は、IB の Objects リストから不思議なオブジェクトを使用して、他のビュー コントローラーを表し、そのアウトレットを接続することです。

この回答iOS 5でストーリーボードを使用してカスタムView Controllerコンテナを作成する方法が役立つはずです。回答には、非常に役立つ実用的なサンプルアプリも含まれています。

于 2011-11-23T04:29:08.900 に答える