11

2 つの画面 (MainViewController と AboutViewController) を持つアプリがあります。ユーザーがボタンをクリックすると、別の XIB で定義されている AboutViewController 画面をロードしたいと思います。

単純に思えますが、今日は自分の google-fu が見つからないようです。どうやってこれをやってのけるのですか?

4

3 に答える 3

30

を呼び出すときは、 のシノニムである[AboutViewController init]の何らかの形式を呼び出すことが期待されます。これが発生すると、View Controller は (あなたの場合) という名前の nib ファイルを自動的に探します。そのファイルが見つかった場合は、その内容がビュー コントローラーに読み込まれます。[super init][UIViewController init]AboutViewController.xib

したがって、基本的に必要なことは、View Controller を初期化し、関連する nib ファイルと同じ名前であることを確認することだけです。

別の名前のnibファイルをView Controllerにロードしたい場合は、initWithNibName:bundle:好きなnibファイルの名前で明示的に呼び出すことができます。

標準の init (同名の nib ファイルを使用) が機能しない場合は、確認できることがいくつかあります。

  • クラス名のスペルは、nib ファイルのスペル (および大文字と小文字) と同じです。
  • nibファイルはプロジェクトに含まれており、同じディレクトリにあるだけではありません
  • UIViewControllerサブクラスの init メソッドも呼び出します[super init]
  • UIViewControllerサブクラスの init メソッドを呼び出しています
  • あなたは実際にView Controllerのビューを見えるようにしています
于 2009-09-19T10:07:10.780 に答える
11

バージョン情報画面では、おそらくビューを表示してから閉じたいだけでしょう。したがって、まったく新しいView Controllerを使用するのではなく、現在のビューをカバーすることができます.

あなたがivarを持っていると仮定します

UIView *aboutUsView;

適切なプロパティで。

ビューコントローラーで次のようにします。

[[NSBundle mainBundle] loadNibNamed:@"AboutUsView" owner:self options:nil]; // Retains top level items
[self.view addSubview:aboutUsView];  // Retains the view
[aboutUsView release];

ビューを削除するには、たとえば、ビューのボタンに接続されたアクションで、次のようにします。

[aboutUsView removeFromSuperview], aboutUsView = nil;  // Releases the view
于 2009-09-20T23:21:08.563 に答える
0

NSBundle loadNibNamed:

于 2009-09-19T09:14:53.770 に答える