タブバーと3つのタブがあるシンプルなiPhoneアプリがあります。各タブは、対応するコントローラーを備えた個別のペン先としてロードされます。各ペン先には、検索/フィルタリングなどのための他のコントロールを備えたテーブルビューが含まれています。
私が欲しいのは(そして例を見つけることができないようです)、各ニブ(つまり各タブ)がさらに詳細なページにドリルダウンできるようにアプリにNavigation Controllerを追加することです。
メインウィンドウにNavigation Controllerを追加してIBOutlet
を作成するか、NCをペン先に追加する必要がありますか。
XIBにタブバーがある場合、これに最も簡単なアプローチは、UINavigationControllerオブジェクトをライブラリウィンドウ(金色の背景の左ナビゲーションバーボタンのように見える)からタブバーのツリービューにドラッグすることです( GUIではなく、テキストのみのビュー)。 Navigation ControllerをTab Bar Controller内に配置し、Navigation Controller内に既存のView Controllerをドラッグします。
そのタブを表示すると、その上部にナビゲーションバーが表示されます...別のxibからナビゲーションコントローラーを読み込んでいる場合は、タブバーxibのナビゲーションバーを変更します。
これは、NavigationControllerをプログラムで追加する方法です(たとえば、AppDelegateで)
UIViewController *viewController1, *viewController2;
viewController1 = [[[UIViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:nil] autorelease];
UINavigationController *navigationcontroller = [[[UINavigationController alloc] initWithRootViewController:viewController1] autorelease];
viewController2 = [[[UIViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller, viewController2, nil];
Viewcontroller1にテーブルビューがある場合、self.navigationController
を使用してNavigationcontrollerにアクセスできます。 didSelectRowAtIndexPath
でDetailViewを開きます
例えば。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
}
この例では、detailViewControllerはNIBファイルで初期化されます。NIBファイルは、戻るボタン付きのナビゲーションバーを追加します。ただし、プログラムでdetailViewController
を初期化する場合は、UIBarButtonItem
にアクション(GoBack)を追加して、NavigationControllerからdetailViewController
を削除できます。
-(void) GoBack
{
[self.navigationController popViewControllerAnimated:YES];
}
私はこれが遅いことに気づきましたが、この質問は今日のグーグルの結果で一番ですので、答えを追加すると思いました。 O'Reillyによる素晴らしいYouTubeビデオチュートリアルがあり、Tabbar + Navigation Controllerアプリについて説明しています。こちらをご覧ください: http://www.youtube.com/watch?v=LBnPfAtswgw
たくさんの答えがありますが、チェックされるものはありません...
もちろん、これはXcodeインターフェイスビルダーのストーリーボードを使用すると、非常に簡単になりました。
目的のNavigation Controllerを作成し、メニューEditor
および項目Embed In >
その後、Tab Bar Controller
。
これは、新しいプロジェクトのmaster/detail split-view-controllerテンプレートで開始したときにXcodeが表示するNavigation Controllerでも機能しました。どちらの場合も、Tab Bar Controllerをマスターとして使用できます。 iPhoneの場合、エンドコントローラー全体に波及し、iPadの場合、タブはマスターにのみ保持されます(つまり、ランドスケープでは右側の分割、ポートレートではポップオーバー)。
それについて考える方法はこれです:
各タブにNavigation Controllerが必要です。次に、各navコントローラーにルートビューコントローラーと読み込まれたNibが必要です。
そのため、IBでは、各タブにnavコントローラーを追加します。次に、各navコントローラーが適切なルートビューコントローラーとNibを持つように構成します。
UITabBarControllerのXIBファイルを開きます(MainWindow.xibから)
「タブバーコントローラーの属性」に移動します。そこに「View Controllers」セクションが表示され、各タブのView Controllerが記載されます。必要なタブのコントローラーのタイプをNavigationControllerに変更するだけです。
変更したコントローラーのビューを選択し、その属性でloadFromNibオプションを確認し、正しいnibを選択します。 (コントローラーの種類を変更した後、この接続は失われたはずです)
質問は古すぎますが、SDKはアップグレードされており、読者によっては新しい回答が必要な場合があります。したがって、ストーリーボードユーザーにとって、TabbarとNavigation Controllerの両方を使用する答えは非常に簡単です。
これにより、アプリケーションにNavigation ControllerとTabView Controllerの両方がロードされます。