0

2つのxibファイルがあります。「ViewController.xib」から始めて、ユーザーがボタンをクリックすると、「GamePage.xib」という名前の別のxibファイルが読み込まれます。

ボタンのコードは次のとおりです。

-(IBAction)startButtonClicked{    
    UIViewController *gamePage = [[UIViewController alloc] initWithNibName:@"GamePage" bundle:nil];
    [self presentViewController:gamePage animated:NO completion:nil];
}

ボタンをクリックすると、2番目のxibが画面に表示されますが、その「viewDidLoad」メソッドは実行されません…</ p>

何故ですか?

4

2 に答える 2

2
UIViewController *gamePage = [[UIViewController alloc] initWithNibName:@"GamePage" bundle:nil];

これは正しくないようです。

viewDidLoadおそらく実行されていますがviewDidLoad、AppleのものUIViewControllerです。UIViewControllerクラスを初期化するときではなく、クラスを使用する必要があります。一般に、必要なviewDidLoadを呼び出すクラスを使用する必要があります。

于 2012-11-01T20:17:22.863 に答える
1

XIB には所有者が必要です。UIViewController から派生したクラスを作成する必要があり、そのクラスの所有者を XIB にする必要があります。次の手順に従ってください。

  • プロジェクトを開く
  • 左側のナビゲーション パネルでプロジェクト名を選択します
  • 右クリックして [新しいファイル] を選択します
  • Objective C タイプ クラスの選択
  • それをクリックすると、名前を付けるように求められます
  • GameViewController を与えたとします。
  • 「インターフェース用XIBあり」にチェックを入れる
  • 次に、ファイルを追加します
  • ナビゲーション パネルに 3 つのクラスが表示されます。 GameViewController.h GameViewController.m GameViewController.xib xib にインターフェイスを作成します。

そして、このクラスに移動してそのビューを表示する必要がある場合は、次のコードを記述します。

 -(IBAction)startButtonClicked{    
    GameViewController *gamePage = [[GameViewController alloc] initWithNibName:@"GameViewController" bundle:nil];
    [[self navigationController] pushVIewController:gamePage animated:YES];
    [gamePage release]; //If not used ARC
}
于 2012-11-01T20:32:39.373 に答える