0

私は非常に単純なことをしようとしているので、SingleViewApplicationテンプレートを使用してテストプロジェクトを作成しました。

ViewController.xibで、メインビューに子UIViewを追加しました。タイプUIViewのIBOutletを作成し、それをXIBのそのビューにリンクしました。

TVCという2番目のクラスとxibを作成し、背景色を青に変更して、表示されたときに目立つようにしました。

ViewController.mで、次のようにTVCを表示させました。

self.childView = [[TVC alloc] initWithNibName:@"TVC" bundle:nil].view;

しかし、何も変わりません。TVCメソッドinitWithNibNameにブレークポイントを設定すると、呼び出されます。

私が間違ったことは何ですか?私は過去にこれを10回行ったことがあることを誓います、そしてそれはいつもうまくいきました。-.-今日私は何が欠けていますか?

ありがとう、-コード

4

2 に答える 2

1

ビューコントローラーをインスタンス化していますが、実際には何もしていません。モーダルに表示したい場合は、これを使用します。

UIViewController *controller = [[TVC alloc] initWithNibName:@"TVC" bundle:nil];
[self presentViewController:controller animated:YES completion:nil];

または、現在のビューに新しいコントローラー ビューを追加するだけの場合は、次を使用する必要があります。

[[self view] addSubview:controller.view];
于 2012-12-21T13:57:34.150 に答える
0

分解してみましょう。

最初の XIB はコントローラーを作成し、その childView を作成し、最初のコントローラーを作成するときにサブビューとして自動的に追加します。

次に、2 番目のコントローラーを作成し、そのビューを取得して childView に割り当てます。

カーテンの後ろで何が起こっているのですか?親View Controllerにはまだ元のchildViewがサブビューとして追加されており、決してそうしなかった[self.view addSubview:self.childView];ため、TVC.viewは表示されません。

機能させる方法: これを機能させるには、親コントローラーの xib から childView を取り出す必要があります。必要に応じてIBOutlet、プロパティからタグを削除できます。次に、次のコードを追加します。

self.tvc = [[TVC alloc] initWithNibName:@"TVC" bundle:nil];
self.childView = [[TVC alloc] initWithNibName:@"TVC" bundle:nil].view;
[self.view addSubview:self.childView];

はい、コントローラーをどこかに保管する必要があります。ビューを使用し、コントローラーをどこにも保持しないと、コントローラーが解放され、不正なアクセス クラッシュが発生し始めます。

于 2012-12-21T13:58:40.553 に答える