2011-07-12 11 views
0

私はUINavigationControllerを使用しようとしていますが、どうすればよいのかは不明です。今まで(約1年間)、私はpresentModalViewControllerとdismissModalViewControllerを使用して、View Controllerの表示/非表示を行ってきました。UINavigationController - 基本

これは私がやったことです。私のメインビューコントローラ(最初に起動時に表示される)は、MainViewControllerと呼ばれ、UIViewControllerを拡張します。

- (void)viewDidLoad { 

     [super viewDidLoad]; 

     self.title = @"Title"; 
     self.navigationController.navigationBar.tintColor = [Constants barColor]; 

      ....more code... 
    } 

しかし、私のMainViewControllerに、私は別のビューを提示したいと思います:

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

    MainViewController *controller = [[MainViewController alloc] init]; 
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:controller]; 
    [self.window addSubview:navigationController.view]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

そして、私のMainViewControllerのviewDidLoadメソッドで:

は、だから私は私のアプリデリゲートにこの起動機能を作りましたコントローラーはSecondViewControllerと呼ばれ、バック矢印ボタン付きのUINavigationBarが必要です。では、SecondViewControllerをUIViewControllerに拡張し、viewDidLoadメソッドのtitleとbackButtonを設定して同じことをしますか?そして私はそれをどのように提示するのですか?これを達成するために私は何をすべきですか?

答えて

1

あなたは、ルートビューコントローラを設定する必要があります。アップルテンプレートから始めるのが最も簡単です。魔法が起こるのはここ

だ:

UIViewController *controller = [[UIViewController alloc] initWithNibName:@"MyNib" bundle:nil]; 
[self.navigationController pushViewController:controller animated:YES]; 
[controller release]; 

のナビゲーションコントローラは、あなたのためにすべての作業(バックボタン、タイトル、アニメーション)を行います - それは追跡し続けます!


私のワークフローはこれです:あなたのデリゲートに次に

NSMutableArray *array = [[NSMutableArray alloc] init]; 
MyCustomViewController *customView = [[MyCustomViewController alloc] initWithNibName:@"nib" bundle:@"nil"]; 
customView.title = @"Second Level"; 
[array addObject:customView]; 
self.controllers = array; 

:のviewDidLoadで

セットアップMutableArray、それにコントローラを追加し、例えば

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSUInteger row = [indexPath row]; 
    UIViewController *childControllerToBe = [controllers objectAtIndex:row]; 
    [self.navigationController pushViewController:childControllerToBe animated:YES]; 
} 

これ、と一緒に多くのことを学ぶことができますなどの適切な初心者の本を読むことBeginning iPhone Development はまた、apple docsはあなたがナビゲーションスタックにプッシュする必要があり、常に:)

+0

待ちましたが、私はこのコードをUIViewControllerに入れています。 「UINavigationControllerがpushViewControllerに応答しない可能性がある」という警告が表示されるUIViewControllerの – CodeGuy

+0

はちょうど同じで、ボタン(またはその他のイベント)を設定し、そのメソッドで子コントローラを作成してプッシュするだけです配列は必要ありません(標準のtableViewメソッドですが)。 - それは本当に奇妙な警告です、あなたのコードを表示できますか? –

0

良いです。

このLectureはスタンフォードのiPhoneコースで、ナビゲーションバーについて多くのことを教えてくれます。

[self.navigationController pushViewController:SecondView]; 

あなたがプログラム的に戻ってPopViewControllerを使用することができますが、戻るボタンが自動的に作成された:あなたはこのコードを必要とすることの中心に基本的に

(それは速い読み取ります)。

ここには講義のsource codeがあります。それはあなたが問題を抱えていることを正確にカバーしています。

1

UINavigationControllerはUIViewControllerのサブクラスですが、UIViewControllerとは異なり、通常はサブクラス化することはできません。これは、ナビゲーションコントローラ自体がナビゲーションバーのビジュアルを超えてカスタマイズされることはめったにないためです。UINavigationControllerのインスタンスは、比較的簡単にコードまたはXIBファイルで作成できます。 「How to add UINavigationController Programmatically