2

私はほとんど夢中になっています:

GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] init];
[self.view addSubview:golOlur.view];

私は上記のコードを持っており、これをIBACtion内部で呼び出しますViewController。皆さんが推測できるようにですGolOlurActionViewControllerViewController

プロセスが開始されると、golOlurviewDidLoadviewDidAppearメソッドが呼び出されますが、ビューは表示されません。

私は知っていることをすべて試しましたが、これを解決できませんでした。

4

2 に答える 2

10

addSubviewビュー間を移行することが目的の場合は、実際には使用しないでください。これを行うと、ビューコントローラ階層がビュー階層と同期しなくなることを許可しているため、回転イベントを受信しません。addSubview真のサブビュー(たとえば、、、、など)をビューに追加する場合にのみUILabel使用する必要があります。またUIImageViewUIButton適切なビューコントローラの包含を行う場合は子ビューなどをビューに追加する必要があります。ビュー間の遷移にを使用するaddSubviewと、ビューコントローラとビューの間の根本的な混乱が生じます。

ビューを適切に管理するための鍵は、ViewController階層がView階層と同期していることを確認することです。これを行う最も簡単な方法は、View Controller間を移行し、ViewControllerにビューの表示を任せることです。したがって、NIBを使用している場合、通常は次のようになります。

GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:golOlur animated:YES completion:nil];

または、ナビゲーションコントローラーを備えたNIB:

GolOlurActionViewController *golOlur = [[GolOlurActionViewController alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:golOlur animated:YES];

または、ストーリーボードを使用している場合(ストーリーボードを使用している場合は、おそらくセグエを使用しているので、これは必要ありませんが、完全を期すためです):

GolOlurActionViewController *golOlur = [self.storyboard instantiateViewControllerWithIdentifier:@"GolOlurActionView"];
[self presentViewController:golOlur animated:YES completion:nil];

ストーリーボードがナビゲーションコントローラーを使用している場合:

GolOlurActionViewController *golOlur = [self.storyboard instantiateViewControllerWithIdentifier:@"GolOlurActionView"];
[self.navigationController pushViewController:pushViewController:golOlur animated:YES];

万が一、コントローラーの封じ込めを行おうとしている場合は、それが少し異なるため(とへの呼び出しが必要)、お知らせくださいaddChildViewControllerdidMoveToParentViewControllerただし、ビュー間の基本的な遷移を実行している場合は、コントローラーの適切な初期化とそれに続くpresentViewControllerまたはpushViewControllerあなたのためにそれを行う必要があります。

アップデート:

簡単に言うと、ストーリーボードを使用している場合(私はそうは思いませんがinstantiateViewControllerWithIdentifier、念のため)、ストーリーボードでセグエを定義し、InterfaceBuilderで識別子文字列を指定することをお勧めします。 、次に次のコードを使用して次のシーンに移行します。

[self performSegueWithIdentifier:@"yourIdentifier" sender:self];

このようにすると、コントローラーのインスタンス化が自動的に行われ、アプリ全体のフローがストーリーボードに正確に表示されます。

于 2012-07-29T16:29:01.170 に答える
2

あなたの問題は、UIViewControllerを自分のやり方で作成したときに、ストーリーボードまたは.xibのビューが表示されることを期待していることだと思いますが、これは機能しません。ストーリーボードにプッシュセグエを接続するか(これには)が必要ですUINavigationController。または、ストーリーボードでも実行できる新しいコントローラーをモーダルに提示する必要があります。このViewControllerのペン先がある場合は、次のように実行できます。

 CustomViewController *controller = [[CustomViewController alloc] initWithNibName:@"CustomViewController.xib" bundle:[NSBundle mainBundle]];

 [self presentViewController:controller animated:YES completion:NULL];    
于 2012-07-29T16:29:45.073 に答える