3

XIB ファイルからインターフェイスを取得するビューを表示することについて、私が理解していない基本的なことがあります。

私のアプリのルート ビュー コントローラーは UITabBarController です。タブ バー オプションの 1 つは、UINavigationController 制御のビューを表示します。そのビューのナビゲーション バーの 1 つに、新しい項目を追加するためのプラス (+) ボタンがあります。AddItem ビューをモーダル ビューとして表示したいので、そのインターフェイスを AddItemView.xib ファイルから取得する必要があります。その XIB ファイルには、Navigation Controller が含まれています。

ただし、ナビゲーション バーは表示されません。そのプラスボタンをクリックしたときに呼び出される関数は次のとおりです。

- (void)showNewView:(UIViewController *)viewController
{
    AddItemViewController *vc = [[AddItemViewController alloc] initWithNibName:@"AddItemViewController" bundle:nil];

//viewController is the UIViewController on which the plus button was tapped
    [viewController.navigationController presentModalViewController:vc animated:NO];
}

私が得るのは白い画面だけです。AddItemViewController の viewDidLoad で何かをする必要がありますか? XIB の UINavigationController インスタンスに何かを接続する必要がありますか?

これはすべて、MainWindow.xib ファイルにあるタブ バーで機能するようです。UITabBarController の下には UINavigationController があり、その下に UITableViewController のサブクラスがあり、タブ バーの対応するオプションをタップしたときに画面に表示される初期コンテンツである UITableView が含まれています。したがって、IBにこれらのものを貼り付けただけで同じことが起こらない理由がわかりません。

冒頭で述べたように、この問題は、XIB ファイル、それらのビュー コントローラー、およびそれらを呼び出すビュー コントローラーの間の関係についての根本的な誤解に起因していると確信しています。したがって、この特定の問題を解決したいのですが、この広範な誤解に対処できる回答が欲しいです。

4

1 に答える 1

3

あなたが提示しているView Controllerはvcで、AddItemViewController. .xib ファイルにナビゲーション コントローラーがあるだけでは十分ではありません。実際に使用する必要があります。;-)

必要なことを行う 1 つの方法の例については、View Controller をモーダルに表示するのリスト 6-1 を参照してください。.xib に既にあるナビゲーション コントローラーを使用する場合は、そのためのアウトレットを作成し、AddItemViewController現在提示しているものではなく提示します。

これはすべて、MainWindow.xib ファイルにあるタブ バーで機能するようです。UITabBarController の下には UINavigationController があり、その下に UITableViewController のサブクラスがあり、その下に初期コンテンツである UITableView が含まれています...

MainWindow.xib 内のこれらのオブジェクトはすべて同時に読み込まれ、既に相互に接続されています。しかし、タブ バーがテーブル ビュー コントローラーに直接接続されていませんよね? ナビコントローラーに接続しました。対応するタブがタップされたとき、タブ バー コントローラーはテーブル ビュー コントローラーについて何も知りません。そのビューをナビゲーション コントローラーに要求するだけで、ナビゲーション コントローラーはテーブル ビュー コントローラーにそのビュー、レイヤーを要求します。ナビゲーション ビュー (「ナビゲーション インターフェイスの構造」を参照) を使用して、結果をタブ バー コントローラーに返します。

タブ バー コントローラーをテーブル ビュー コントローラーに直接接続するとどうなるか想像してみてください今回は、タブ バー コントローラーがテーブル ビュー コントローラーと直接通信するため、そのタブのビュー コントローラーにそのビューを要求すると、返されるのはテーブル ビュー コントローラーのビュー、つまりナビゲーション機能のないテーブルだけです。

モーダルView Controllerでも同じことが起こっています。ナビゲーション コントローラーではなく AddItemViewController を提示しているため、取得できるのは AddItemViewController だけです。

于 2011-07-03T00:46:27.907 に答える