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를 작성하고 그것을 채워 : 나는 모든 인이보기 컨트롤러의 tabBarItems 일부 제목과 이미지를 추가 한

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

다음 잘 작동하지만 응용 프로그램 위에 탐색 바를 표시하려고합니다. 그래서 네비게이션 컨트롤러를 만들었지 만 컨트롤러를 시작하기 위해 어떤 컨트롤러를 볼 필요가 있는지 알지 못합니다. vc1을 사용하고 navController를 rootViewController로 설정하면 응용 프로그램은 vc1의 뷰를 표시하고 navBar를 표시하지만 tabBar는 표시하지 않습니다.

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

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

나는 tabBarController가 navController init을하고 rootViewController로 navController을 설정하는 설정하려고 -이 경우 뷰, 한 tabBar 및 네비게이션 바에 디스플레이에 올바르게,하지만 난 뷰 VC1, VC2, VC3과 관련된 navBarItems이 없습니다.

이 내가 (예를 들어, AAA.m에서) navBarItems 생성하는 방법입니다

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

을 내가 그것을 모두 함께 작동되도록하려면 어떻게해야합니까? 감사.

편집 :

나는 코드에 약간의 수정을했고 지금은 네비게이션 바는 볼 수 있지만 UINavigationController가의 initWithRootViewController 방법에서 설정 한 뷰 컨트롤러. 예를 들어, 다음 코드에서는 vc2에서만 모든보기 및 탐색 막대에 탭 표시 줄을 볼 수 있습니다. 그리고 내 의도는이 세 가지의 모든 탭 막대 및 탐색 막대를 가지고 있습니다.

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에 클래스, 메소드에서

: didlaunchFinish :

이있는 viewDidLoad 방법에서 첫번째 탭에 첫 번째 뷰 컨트롤러, 에서 지금
let vcTabBarViewController = STORYBOARD.instantiateViewController(withIdentifier: "TabBarViewController") as? TabBarViewController 
     navigationController.viewControllers = [vcTabBarViewController!] 

:

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) 

I 희망 : 다음 라인을 붙여 이렇게하면 문제가 해결됩니다.

1

모든 컨트롤러는 네비게이션 바에서 다른 컨트롤러에 다른 제목을 표시 할

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

Unfortunatelly 컨트롤러를보기 위해 추가 한 후 (init 및 viewWillLoad 메서드에 넣으려고했지만) 아무 것도 변경되지 않았습니다. 내가 편집 한 지위에 쓴대로 나는 여전히 국가를 가지고있다. –