1。ステップ:新しいUIViewControllerを作成します:
-Xcode->新しいファイル...-> CocoaTouchクラス-> UIViewController
-名前:MyViewController
2。ステップ:「ナビゲーションコントローラー」(UINavigationController)をライブラリからMyViewController.xibにドラッグアンドドロップします
.Step:確かに、ナビゲーションコントローラーを正しく接続するために何かしなければなりませんね。
4.Step:新しいViewControllerをモーダルダイアログとして起動してみてください。
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
[self.navigationController presentModalViewController: myViewController animated:YES];
結果: "navContr:nil"
5.Step:新しいモーダルビュー(MyViewController)を表示できますが、NavigationControllerとUINavigationBarはありません。
手伝ってくれてありがとうございます!
更新1:
6.Step:新しいUIViewController(ViewNavi2)を「ルートビューコントローラー」として設定しました。
7.Step: MyViewControllerクラスでIBOutlet UINavigationController *navigationController
を定義し、xibを構成します:ナビゲーションコントローラー->接続->アウトレットの参照
しかし、私のナビゲーションコントローラーはまだゼロです:-(
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
// -> "navContr: nil"
ナビゲーションコントローラーもNIBファイルに含めたかったのですが、Appleのドキュメントには、実際にその方法を説明せずに「最適ではない」と書かれていました。メインのタブが必要でした。ナビゲーションコントローラーをプログラムで定義せずに、一般的なナビゲーションコントロールを含むモーダルウィンドウを呼び出すウィンドウ。その方法を共有します。
MyViewControllerでIBOutlet UINavigationController *navigationController
も定義したので、あなたのコードは私のものと非常に似ていました。 Interface Builderから、ルートビューコントローラーでビューを定義し、ファイルの所有者->ビューをそのビュー定義に設定するだけです。
そして、あなたのコードと同様に、私は私の親ウィンドウで次のことをしました:
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[self presentModalViewController:myViewController animated:YES];
(自分でpresentModelViewControllerを呼び出していますが、なぜself.navigationController
があったのかわかりません。)これをテストした結果、ビューはNIBファイルから読み込まれましたが、ナビゲーションバーがありませんでした。 MyViewControllerのもう1行のコードで、これが修正されました。
- (void)viewDidLoad {
[super viewDidLoad];
[self setView:myNavigationController.view];
}
ここで行っているのは、ナビゲーションコントローラーを含むNIBファイルで定義されたすべてのものを含むmyNavigationController.viewを指すようにMyViewControllerのビューを設定することだけです。
XCodeの「ナビゲーションベースのアプリケーション」のテンプレートを見てください。 (新しいプロジェクト->ナビゲーションベースのアプリケーション)次に、InterfaceBuilderでMainWindow.xibを開きます。ビューではありませんが、手順1で作成したビューコントローラーと考えてください。次に、インスペクターで参照されている「ルートビューコントローラー」を見て、の「ルートビューコントローラー」ペン先にどのように接続されているかを確認します。属性インスペクターとIDインスペクターの「RootViewController」クラス。
表示するコンテンツを、ナビゲーションのルートにあるバージョンの「RootViewController」に配置することをお勧めします。通常、次に表示されるコントローラーは「DetailViewController」です。繰り返しになりますが、テンプレートが提供するサンプルコードを読むと、その開始方法がわかります。 RootViewController.mのサンプルテンプレートのdidSelectRowAtIndexPath
にあるコメント付きコードを見てください。 DetailViewControllerとして機能する独自のViewControllerを作成する必要があります。
うまくいけば、これはあなたのために物事をクリアするでしょう。
//コメントに基づいて編集//
Appleドキュメントによると、ナビゲーションコントローラーを作成するためにIBを使用する場合は、実際にそれらをMainWindow.xibに配置する必要があります。私はそれができないという事実をいじくり回していました。 UIViewオブジェクトのサブビューとしてNavigationControllerを使用します。開始した場所でできることは、IBを使用してナビゲーションバーオブジェクトをView Controllerに追加し、そこから制御することです。
Appleドキュメントから)メインのnibファイル(または他のnibファイル)からスタンドアロンまたはモーダルで表示されるナビゲーションコントローラーをロードすることもできますが、そうすることは最適ではありません。これらのシナリオでは、通常、使用時にプログラムでナビゲーションコントローラを作成する方が簡単です。」
//その他の編集// XCode4では、プロジェクトテンプレートは「マスター詳細」プロジェクトと呼ばれるようになりました。これは、iPadではスプリットビューコントローラーとしてセットアップされますが、iPhoneでは通常のナビゲーションプロジェクトであるためです。答えの中で「RootViewController」を参照すると、「MasterViewController」と呼ばれるものが見つかります。
次のコードは、有効なオブジェクトを提供しません。
NSLog(@"navContr: %@", myViewController.navigationController);
その理由は、UIViewControllerのnavigationControllerプロパティが View Controllerがスタックにある場合にのみNavigation Controllerを返します。NavigationControllerが見つからない場合、このプロパティはnilです。 ViewControllerがのスタックにないためです。ナビゲーションコントローラー。とにかく、ナビゲーションコントローラーを正しく初期化したかどうかさえわかりません。いくつかのドキュメントを読んでください。