1

この問題を確認しており、コードで UINavigationController を手動で作成することで解決しています。XIB の属性インスペクターからナビゲーション バーを追加すると、誰か教えてください -> トップ バーを黒のナビゲーション バーに設定すると、XIB に表示されますが、プログラムを実行すると表示されません。self.NavigationController が nil になっていることに気付いたので、XIB に UINavigationController を追加して NIB を割り当てましたが、それでも nil です! これの何が問題なのですか?追加の設定が必要ですか?

[編集1]

以下のように追加してみましたが、動作しますが、親クラスが回転イベントと外観イベントを子コントローラーに自動的に転送するようにします。次のことを行うと、nvc を子として追加し、marketsListViewController として追加していないため、それらは送信されません。そのため、UINavigationController をサブクラス化する必要があると考えました。EDIT2 を参照してください。

self.marketsListViewController = [[MarketsListViewController alloc] initWithNibName:@"MarketsListViewController" bundle:nil];
UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:self.marketsListViewController];
nvc.navigationBar.barStyle = UIBarStyleBlack;
[self.marketsListView addSubview:nvc.view];

[self addChildViewController:nvc];
[nvc didMoveToParentViewController:self];

[編集2]

marketListViewController を UINavigationController にサブクラス化し、次のように動作すると考えましたが、動作しません。ナビゲーションバーを表示するだけで、UITableView は表示されません!

self.marketsListViewController = [[MarketsListViewController alloc] initWithNibName:@"MarketsListViewController" bundle:nil];
self.marketsListViewController.navigationBar.barStyle = UIBarStyleBlack;
[self.marketsListView addSubview:self.marketsListViewController.view];

[self addChildViewController:self.marketsListViewController];
[self.marketsListViewController didMoveToParentViewController:self];

[編集3]

Edit1 で間違っていたのは、子をナビゲーション コントローラーのルート コントローラーとして追加すると、子コントローラーが回転イベントを取得しないことです。親はまだすべてのイベントを自動的に送信しており、それが私が望んでいることです! :)

XIB からのナビゲーション バーを追加

4

1 に答える 1

3

XIB の属性インスペクターからナビゲーション バーを追加するときに教えてください -> トップ バーを黒のナビゲーション バーに設定すると、XIB に表示されますが、プログラムを実行すると表示されません。

.xib ファイルに表示される内容は、適切なレイアウトを作成し、どのように表示されるかを把握するのに役立ちます。ナビゲーション バーを使用するアプリがある場合、ほとんどの場合、バーはナビゲーション ビュー コントローラー ( UINavigationController) によって管理されます。ナビゲーション コントローラーがホストするビュー コントローラーは、ナビゲーション バーを気にしません。それらのビュー階層は、バーの下のスペースに入ります。

したがって、アプリでナビゲーション バーを取得する正しい方法は、ほぼ確実にナビゲーション コントローラーを使用することです。ビュー コントローラーが 1 つしかない場合は、それをナビゲーション コントローラーのルート ビュー コントローラーにします (注:ウィンドウのルート ビュー コントローラーはナビゲーション ビュー コントローラーになります)。ナビゲーション バーのスタイルを設定することで、View Controller からバーの外観を変更できます。

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

更新:投稿したコードでは、新しいナビゲーション コントローラーを作成しているだけで、何もしていません。上記で、(ほとんどの場合) ナビゲーション コントローラーがウィンドウのルート ビュー コントローラーであるべきであることをほのめかしました。コードでナビゲーション コントローラーを作成しても問題ありませんが、通常はアプリ デリゲートで作成し、作成したらウィンドウのルート ビュー コントローラーとして設定します。以下は、Xcode のマスター/詳細テンプレート (ストーリーボードなし) から新たに作成されたプロジェクトから借用した例です。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    MasterViewController *masterViewController = [[MasterViewController alloc] initWithNibName:@"MMMasterViewController" bundle:nil];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

ウィンドウとナビゲーション コントローラーを作成した後、コードはナビゲーション コントローラーをウィンドウのルート ビュー コントローラーとして設定することに注意してください。

于 2012-10-25T14:19:54.437 に答える