5

ストーリーボード ファイルにコンテナー ビューを設定していますが、いくつかのプロパティを設定した後、ビュー コントローラーをプログラムで埋め込みたいと考えています。これは、親VCのviewDidLoadの私のコードです:

_workoutVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"entryTableVC"];
_workoutView = _workoutVC.tableView;

[self addChildViewController:_workoutVC];

[_workoutVC.tableView setFrame:_container.bounds];
[_container addSubview:_workoutView];

ただし、子の viewDidLoad は常に呼び出されません。シミュレーターを実行すると、コンテナー ビューが空白になります。デバッガーでチェックインしたところ、私のプロパティはどれもnil.

4

7 に答える 7

0

私も似たような状況でした。コンテナー ビュー コントローラーで通常の UIView を使用しました (Xcode が提供する「コンテナー ビュー」とは対照的に)。

私が使用した一連のイベントは次のとおりです。

    ChildViewController *childViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"ChildViewController"];
    childViewController.view.frame = self.viewForChildViewController.frame;
    self.viewForChildViewController = childViewController.view;
    [self.view addSubview:self.viewForChildViewController];

    [self addChildViewController:childViewController];
    [childViewController didMoveToParentViewController:self];

ちょっと面倒ですが、子ビュー コントローラーをプログラムで設定できるようにし、子ビュー コントローラーで -viewDidLoad が確実に呼び出されるようにします。また、この後、いくつかのプロパティを設定できるはずです。

于 2013-08-05T19:20:06.543 に答える
0

このviewDidLoad:メソッドは、viewプロパティが初めてアクセスされたときに呼び出されます。あなたの場合はview==だと思いますtableViewloadViewそうでない場合は、子 VCのメソッドを調整する必要があります。

- (void)loadView {
    //create your table view here
    //...
    self.view = self.tableView;
}

次に、viewの代わりにプロパティを使用しますtableView

_workoutView = _workoutVC.view;

編集:

完全なコードは次のようになります。

_workoutVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"entryTableVC"];
_workoutView = _workoutVC.view;

[self addChildViewController:_workoutVC];

[_workoutView setFrame:_container.bounds];
[_container addSubview:_workoutView];
于 2013-07-29T22:26:45.760 に答える
-1

「いくつかのプロパティを設定した後、View Controller をプログラムで埋め込みたい」 --- それはできません。コンテナ ビューがある場合、ビュー コントローラが自動的に埋め込まれ、親コントローラの viewDidLoad の直前にその viewDidLoad が呼び出されます。埋め込みコントローラーのいくつかのプロパティを設定する場合は、親コントローラーの prepareForSegue で設定できます。

于 2013-07-29T22:35:41.230 に答える