2011-07-09 18 views
0

Objective-CとiPhoneプログラミングの新機能ですので、初心者向けの質問であればお詫び申し上げます。ある視点から別の視点に移動する必要があるシンプルなアプリケーションがあります。最初のビューはUIViewControllerです。私はIBでxibファイルをセットアップしました(つまり、いくつかのボタンをウィンドウ上にドラッグしました)、すべてのボタンを接続しました。私は別のxibファイルとクラス(またUIViewController)を作成し、それらをフックしました。最初のビューでボタンを押すと、2番目のビューをロードします。ビューをプッシュするコードは次のとおりです。pushViewControllerが機能していない

-(IBAction)createAccount:(id)sender{ 
    CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil]; 
    [self.navigationController pushViewController:acctView animated:YES]; 
    [acctView release]; 
} 

これは何もしません。 print文をcreateAccountメソッドに置くと、それらが出力されます(ボタンを何回もクリックすることができ、決してクラッシュしません)が、acctViewは決してプッシュされません。 self.navigationControllerの値を出力するとnullが返されます。私がacctViewをモーダルに提示すると、それはうまく動作するので、それは見知らぬ人です。

-(IBAction)createAccount:(id)sender{ 
    CreateAccountViewController*acctView = [[CreateAccountViewController alloc] initWithNibName:@"CreateAccount" bundle:nil]; 
    [self presentModalViewController:acctView animated:YES]; 
    [acctView release]; 

}

これはうまく動作しますが、私は、モーダルビューを使用する必要はありません。私はここで完全に迷っています。過去数時間のうちに、私はUINavigationControllerで何かをして、それを私の視点までフックすると言っている多くの記事に出くわしましたが、どうすればいいですか?どんな助けでも大歓迎です!ありがとう。

+0

あなたはnavigationControllerをお持ちですか?試してみてくださいNSLog(@ "%@"、self.navigationController); –

+0

私は、self.navigationControllerがnullであることを出力します。 – ORL

答えて

7

あなたのアプリケーション用のUINavigationControllerを作成していないようです。

新しいXcodeプロジェクトでは、ナビゲーションベースのアプリケーションを選択して、まず最初から作業が開始されます。この方法では、あなたのためにすでに設定されているほとんどすべてを取得します。

この方法が嫌いなら、プログラムでUINavigationControllerを作成することができます。 Hereこれを行うためのチュートリアルがあります。

あなたはもっとストレートツー・ポイントの指示を好む場合は、ここで彼らは、次のとおりです。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil]; 
    self.navigation = [[[UINavigationController alloc] initWithRootController:overviewViewController] autorelease]; 
    [overviewViewController release]; 

    [window addSubview:[navigation view]]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

self.navigationはあなたのappDelegateでretain編プロパティができます。

EDIT:

この答えはかなり古いだったので、更新:

  1. あなたはARCを使用している場合、あなたはstrong(対retain)プロパティを使用しなければならないし、必要ないでしょうautorelease;

  2. あなたは(これも上記の点によって暗示される)のiOS> 4.0は、あなたがUIWindowrootViewControllerプロパティを使用すると言うことができるターゲットとします

    MainPageDialog *overviewViewController = [[MainPageDialog alloc] initWithNibName:@"MainPage" bundle:nil]; 
    self.window.rootViewController = [[[UINavigationController alloc] initWithRootController:overviewViewController] autorelease]; 
    [overviewViewController release]; 
    
    [window addSubview:[self.window.rootViewController view]]; 
    [self.window makeKeyAndVisible]; 
    

    任意のnavigationプロパティを必要とせずに。

+0

それを修正しました!ありがとう。 – ORL

+0

「私のpushViewControllerが動作しないのはなぜですか?」という答えは、何年も前にStack Overflowで見たタイプの質問です。簡潔かつ明確です。Sergioに感謝します。 –

+0

@Global nomad:ありがとう、ありがとう! – sergio

関連する問題