2

我正面臨着同時使用UITabBar和UINavigationBar的問題。我的意圖是讓tabBar在顯示自定義名稱的每個選項卡上顯示我的3個選項卡和navBar,並在這些選項卡的某些上另外顯示一些按鈕(如添加按鈕)。使用UITabBar和UINavigationBar

我創建了AppDelegate中的didFinishLaunchingWithOptions視圖控制器:

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

創建的TabBar和填充它:

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

接下來,我增加了一些標題和圖像,這些視圖控制器的tabBarItems這是所有工作正常,但比我想在應用程序頂部顯示導航欄。所以我創建了導航控制器,但我不知道我需要用什麼視圖控制器來啓動它。如果我使用vc1並將navController設置爲rootViewController,則應用程序顯示vc1的視圖並顯示navBar,但不顯示tabBar。

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

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

我試圖設置tabBarController給init navController並設置navController爲RootViewController的 - 正確地在這種情況下的意見,和的TabBar導航欄顯示,但我沒有,可欣賞VC1,VC2,VC3相關navBarItems。

這是我如何創建navBarItems(例如,在AAA.m):

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

什麼我需要做的,使這一切一起工作?謝謝。

編輯:

我提出了一些修改的代碼和現在的導航欄是可見的,但僅在的UINavigationController的initWithRootViewController方法設置視圖控制器。例如,在下面的代碼中,我只能看到vc2上每個視圖和導航欄上的標籤欄。我的意圖是在這三個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

好的,我有一個方法給你......爲此,你需要在故事板中進行更改。 下面是截圖 enter image description here

現在您可以創建UITabBar類:class TabBarViewController: UITabBarController

不要在這個類寫東西,它只是供我們參考。

在AppDelegate類,方法:didlaunchFinish:

let vcTabBarViewController = STORYBOARD.instantiateViewController(withIdentifier: "TabBarViewController") as? TabBarViewController 
     navigationController.viewControllers = [vcTabBarViewController!] 

現在,在您的第一個視圖控制器,它是第一個選項卡上, 在viewDidLoad方法: 粘貼這些行:

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) 

希望這將解決您的問題。

1

添加這些行代碼的每個控制器

[self.tabBarController setTitle:@"xyz"]; 
self.tabBarController.navigationController.navigationBarHidden=NO; 
你想顯示不同的控制器上的不同標題導航欄上
+0

將它添加到視圖控制器後(我試圖把它放在init和viewWillLoad方法中)沒有任何改變,這是不幸的。我仍然擁有編輯過的文章中所寫的狀態。 –

相關問題