2

私はUITabBarとUINavigationBarを同時に使用する際に問題に直面しています。私の意図は、TabBarに3つのタブを表示させ、これらのタブのそれぞれにnavBarを表示してカスタム名を表示し、これらのタブのいくつかに追加ボタン(追加ボタンなど)を追加表示することです。UITabBarとUINavigationBarの使用

私はAppDelegateのdidFinishLaunchingWithOptionsのビューコントローラを作成:私はすべてであるこれらのビューコントローラのtabBarItemsにいくつかのタイトルや画像を追加した

self.tabBarController = [[UITabBarController alloc] init]; 
self.tabBarController.viewControllers = @[vc1, vc2, vc3]; 

次へ:

AAA *vc1 = [[AAA alloc] init]; 
BBB *vc2 = [[BBB alloc] init]; 
CCC *vc3 = [[CCC alloc] init]; 

はタブバーを作成し、それを人口をうまく動作しますが、アプリケーションの上にナビゲーションバーを表示したかったのです。だから私はナビゲーションコントローラを作成しましたが、私はそれを開始するために必要なビューコントローラを知りません。 vc1を使用してnavControllerをrootViewControllerに設定すると、アプリケーションはvc1のビューを表示してnavBarを表示しますが、tabBarは表示されません。

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc1]; 
self.window.rootViewController = navController; 

//self.window.rootViewController = self.tabBarController; 

私はからNavControllerを初期化し、rootViewControllerとからNavControllerを設定するtabBarControllerを設定しようとしました - この場合の景色、正しくタブバーとナビゲーションバーの表示には、私は、ビューのVC1、VC2、VC3に関連したnavBarItemsを持っていません。

これは私が(例えばAAA.m中)navBarItemsを作成する方法である:私はそれをすべて一緒に動作させるために行うに

- (instancetype)init { 
self = [super init]; 
if (self) { 
    UINavigationItem *navItem = self.navigationItem; 
    navItem.title = @"name"; 
} 
return self; 
} 

何が必要ですか?ありがとう。

EDIT:

私は、コードにいくつかの変更を行い、現在はナビゲーションバーが見えますが、唯一のUINavigationControllerのinitWithRootViewController方法で設定したビューコントローラです。たとえば、次のコードでは、vc2のすべてのビューとナビゲーションバーにタブバーが表示されます。私の意図は、これらの3つのVCのすべてにタブバーとナビゲーションバーを持つことです。

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:vc2]; 

self.tabBarController = [[UITabBarController alloc] init]; 
self.tabBarController.viewControllers = [NSArray arrayWithObjects:vc1, navController, vc3, nil]; 


self.window.rootViewController = self.tabBarController; 
+0

をコードのこれらの行を追加しますか? –

+0

すべてのタブバービューでナビゲーションバーを表示したいです。私は別のビューで異なる情報を表示するためにそれをカスタマイズする方法を知っていますが、ここではタブバーを使って見えるようにすることはできません。 –

答えて

1

私はあなたにアプローチしています。これはストーリーボードで変更する必要があります。 class TabBarViewController: UITabBarController

それだけで私たちの参考のために、このクラスには何も記述しないでください:ここで は今UITabBarのためのクラスを作成し、スクリーンショット enter image description here

です。

AppDelegateクラス、メソッドで

:私は願っています

let tabBar = self.tabBarController?.tabBar 
let homeTab = tabBar?.items?[0] as UITabBarItem! 
let searchTab = tabBar?.items?[1] as UITabBarItem! 
let myProfileTab = tabBar?.items?[4] as UITabBarItem! 

homeTab?.image = UIImage(named: "home-select")!.withRenderingMode(.alwaysOriginal) 
homeTab?.image = UIImage(named: "home")!.withRenderingMode(.alwaysTemplate) 

searchTab?.image = UIImage(named: "search-select")!.withRenderingMode(.alwaysOriginal) 
searchTab?.image = UIImage(named: "search")!.withRenderingMode(.alwaysTemplate) 

:didlaunchFinish:

viewDidLoadメソッドでは第一のタブ、 上にある、あなたの最初のビューコントローラで今すぐ
let vcTabBarViewController = STORYBOARD.instantiateViewController(withIdentifier: "TabBarViewController") as? TabBarViewController 
     navigationController.viewControllers = [vcTabBarViewController!] 

: これらの行を貼り付けこれにより問題が解決されます。

1

を使用すると、ナビゲーションバー上の異なるコントローラ上の別のタイトルを表示したいすべてのコントローラに

[self.tabBarController setTitle:@"xyz"]; 
self.tabBarController.navigationController.navigationBarHidden=NO; 
+0

Unfortunatellyコントローラを表示するために追加した後(initとviewWillLoadメソッドに入れてみましたが)、何も変更されませんでした。私は編集された投稿に書いたままの状態をまだ持っています。 –

関連する問題