2009-09-19 14 views
11

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

シンプルだと思われますが、私は今日私のgoogle-fuを見つけることができません。これをどうやって取り除くのですか?

答えて

30

[UIViewController init]の同義語である[super init]のいくつかのフォームを、呼び出すことが予想されます。これが起こると、あなたのView Controllerは(あなたのケースでは)AboutViewController.xibと呼ばれるnibファイルを自動的に探します。そのファイルが見つかった場合は、その内容をView Controllerにロードします。

基本的には、View Controllerを初期化して、関連するnibファイルと同じ名前を付けるだけです。

異なる名前のnibファイルをビューコントローラにロードする場合は、明示的にinitWithNibName:bundle:を呼び出して好きなnibファイルの名前を付けることができます。

標準のinit(同じ名前のnibファイルを持つ)がうまく動作しない場合は、確認できることがいくつかあります。

  • クラス名の綴りは、nibファイルがプロジェクトに含まれている
  • nibファイルのスペル(ケース)と同じであり、そしてちょうど同じディレクトリに座っていない
  • あなたまた、あなたのUIViewControllerサブクラスのinitメソッドを呼び出している[super init]
  • を呼ぶんUIViewControllerサブクラスのinitメソッド
  • あなたは確かに目に見えるあなたのView Controllerのビューを作っている
+4

私はアイデアXIBsが自動的にロードされなかったましたこのような。ありがとう! – DOOManiac

0

NSBundle loadNibNamed:あなたは[AboutViewController init]を呼び出すと

11

[バージョン情報]画面では、ビューを表示してから消したいだけです。したがって、全く新しいビューコントローラを使用するのではなく、現在のビューをカバーできます。あなたは適切なプロパティと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 
+0

彼は具体的には、View Controllerとビューではなく、 "MainViewController and AboutViewController"という2つのView Controllerを持っていると言いました。 – mahboudz

+5

正しい。そして、私は具体的には、彼が述べた目標を達成するために両方を必要としないと言いました。 –

+0

これは明白な方法のようです。 – user1432813

関連する問題