0

せっかちな人のために:

ルートビューコントローラーがiPadアプリケーションに似たタブバーコントローラーであるナビゲーションコントローラーが欲しいです。私はIOS5とストーリーボードを使用しています。

傾いた読書のために:

私のストーリーボードでは、UINBavigationControllerに埋め込まれているUITabBarControllerに6つのタブがあり、3つのタブが表示された後に[詳細]ボタンが表示されます。

そうすることで、さらに押すと2つのナビゲーションバーが表示されます。

ダブルナビゲーションバー...それはどういう意味ですか?!

だから私はTabBarControllerをサブクラス化します:

//@implentation MyTabController

- (void)viewDidLoad
{
    self.moreNavigationController.wantsFullScreenLayout = NO;
    self.delegate = self;
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    // hide nav bar if current controller is "More" controller
    self.navigationController.navigationBarHidden = 
       viewController == self.moreNavigationController;
}

素晴らしい、これは私に与えます:

もうすぐです

私の推測では、ステータスバーを説明するためにビューを中継する必要があったので、試してみました

[self.view setNeedsLayout:YES];

しかし、UIViewにsetNeedsLayoutのセレクターが含まれていないというエラーが表示されるので、ステータスバーを説明するmoreNavigationController.navigationBarを取得するにはどうすればよいですか?

更新
これに関連する2番目の問題があります。「編集」ボタンを押すと、編集コントローラーがモーダルに表示されます。そのナビゲーションバーは、被保険者のコントローラーのに(アニメーションの後に)表示され、タッチを受け取りません。

4

2 に答える 2

1

tabBarController を NavController にプッシュすることはお勧めしません。代わりに、すべての tabBar ビュー コントローラーに NavigatorController を設定し、TabBarController をメイン ウィンドウのルート ビュー コントローラーとして設定します。

タブバーを表示する前に画面を表示できるようにしたい場合、解決策は、すべてのナビゲーター コントローラーを前のビュー コントローラーに押し込み、その後に表示したいものを押し込むことです (そうすれば、すべてのナビゲーション バーに戻るボタンがあります)。次にhidesBottomBarWhenPushed = YES、最初のView Controllerに設定すると、 tabBar が表示されなくなります。

コード例:

UIViewController *prevc = [[UIViewController alloc] init];
//prevc.hidesBottomBarWhenPushed = YES;

//Do this for every VC that will be a tabBarItem
UIViewController *vc1 = [[UIViewController alloc] init];
UINavigationController *nv1 = [[UINavigationController alloc] initWithRootViewController:prevc];
[nv1 pushViewController:vc1 animated:NO];

//Remember to set the tabBarItem!

UITabBarController *tb = [[UITabBarController alloc] init];
tb.viewControllers = [NSArray arrayWithObjects:nv1, nv2, nv3, nil];

hidesBottomBarWhenPushed を前の ViewController に設定してもうまくいかないことに気付きましたが、まず prevc を表示してから次の viewController をプッシュすれば問題ありません。ただし、ポップ中にタブバーを非表示にしたくない場合は、次のことを確認してください。

于 2012-06-14T19:38:05.977 に答える
0

私も同様の問題に直面しました。私のアプリケーションでも、ナビゲーション コントローラー内に Tabarcontroller があります。プログラムでより多くのナビゲーションコントローラーでビューコントローラーに切り替えようとすると( [self.tabBarController setSelectedIndex:X]; のように)、アプリケーションに同じ問題が発生します。しかし、次のコードは私の問題を解決します。

    self.tabBarController.moreNavigationController.navigationBarHidden = YES;
于 2014-07-16T13:45:59.997 に答える