0
MyViewController *myVC = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

[scrollView addSubview:myVC.view];

上記のコードは機能し、ストーリーボードにあるビューコントローラーをストーリーボードID「MyViewController」でロードし、サブビューとして表示します。

唯一のことは、たとえば、addSubviewを実行する前に、そのViewControllerにUILabelのテキストを設定したいということです。

このような:

MyViewController *myVC = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

myVC.aTextLabel.text = @"pippo";

[scrollView addSubview:myVC.view];

ただし、これは機能しません。UILabelは空です。-addSubviewを実行するまで、ビューで何もできません。このような:

MyViewController *myVC = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

[scrollView addSubview:myVC.view];

myVC.aTextLabel.text = @"pippo";

上記は機能しますが、きれいではありません。ビューが追加された後、ラベルのテキストが変更されます。

ストーリーボードなしでこれを行っていたとき、私はこれを行いました:

MyViewController *myVC = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];

    myVC.aTextLabel.text = @"pippo";

    [scrollView addSubview:myVC.view];

これはうまくいくでしょう。

私が表示しているビューは、sequeを介して他のビューに接続されていません。その複数のインスタンスを、UIScrollViewに並べてロードしているので、最も簡単な方法が上記のようなものになることを期待していました。

では、プログラムでビューをインスタンス化し、そのビューのUILabelを更新してから、サブビューとして追加するにはどうすればよいですか?

4

1 に答える 1

2

したがって、問題は、ビューコントローラが作成(割り当ておよび初期化)されても、誰かがそのビュープロパティを参照するまで、そのビュー階層がロードされないことです。

したがって、myVc.view(実際には[myVc view])を読むと、View Controllerは、まだロードされていない場合、ストーリーボードからビューをロードします。

ここでデザインを検討する必要があるかもしれません。ビューコントローラーを作成し、そのビューを取得して他のビュー階層に追加することは、コンテナービューコントローラーAPIのフレームワーク内で行わない限りお勧めできません。

複数のViewControllerを画面上で一度に組み合わせる場合は、 『View Controllerプログラミングガイド』の「カスタムコンテナViewControllerの作成」を確認してください。

于 2013-03-04T23:06:41.480 に答える