답변:
탐색 표시 줄의 제목은 변경하고 탭 표시 줄의 제목은 변경하지 않으려는 것 같습니다. 그렇게해야합니다.
[self.navigationItem setTitle:@"my title"];
빠른:
self.navigationItem.title = "My Title"
상단 표시 줄 제목 설정
self.navigationController?.navigationBar.topItem?.title = "top title"
탭 항목 제목 설정
self.tabBarController?.tabBar.items?[0].title = "tab title"
두 제목 설정
self.title = "both titles"
topItem
?
들어 스위프트는 이를 사용,
self.navigationItem.title = "Navigation bar title"
self.title = "Tab bar title"
참고 : 각보기 컨트롤러의 루트에 탐색 컨트롤러가있는 탭 모음 컨트롤러가있는 경우 .NET Framework를 설정하는 경우보기 컨트롤러의 탭 모음 항목을 설정해도 제목에 영향을주지 않습니다 navigationItem.title
. tabBarItem
탭 막대 컨트롤러에서 선택하려면 대신 탐색 컨트롤러에을 설정해야합니다 .
내 탭 바의 뷰 컨트롤러에는 모두 루트에 탐색 컨트롤러가 있기 때문에 다른 사람이 게시 한 답변 중 어느 것도 나를 위해 일하지 않았습니다. 이것은 UITabBarController
. tabBarItem
대신 내비게이션 컨트롤러를 설정 해야 제목이navigationItem
의 제목
tabBarItem
직접 생성하여 VC에 연결할 수 있습니다 .
let tabBarVCOne = BooksListViewController()
tabBarVCOne.tabBarItem = UITabBarItem(title: "Books", image: nil, tag: 0)
tabBarViewControllers.append(tabBarVCOne)
...
그러면 다음과 같은 것이 생깁니다.
//Wrap each view controller in a navigation controller.
self.viewControllers = tabBarViewControllers.map(UINavigationController.init)
그러나 tabBarItem
뷰 컨트롤러에서 이미 연결된 항목을 가져와 탐색 컨트롤러에 자동으로 설정 하려면 다음과 같이 변경해야합니다 .
self.viewControllers = tabBarViewControllers.map({
let navigationController = UINavigationController(rootViewController: $0)
navigationController.tabBarItem = $0.tabBarItem
return navigationController
})
이제 .NET에 정의 된 제목과는 별도로 VC에서 설정 한 다른 제목을 가질 수 있습니다 tabBarItem
.
이것에 꽤 늦었습니다. TabBarController를 UITabBarControllerDelegate 및 UINavigationControllerDelegate로 사용하고 각 탭에 포함 된 탐색 컨트롤러로 사용할 수 있습니다.
.h :
@interface YourTabBarController : UITabBarController <UITabBarControllerDelegate, UINavigationControllerDelegate>
@end
.미디엄:
- (void) viewDidLoad {
// UITabBarControllerDelegate
self.delegate = self;
// UINavigationControllerDelegates
yourNavigationController.delegate = self;
...
}
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{
yourNavigationController.tabBarItem.title = @"Tab Bar Title";
...
}
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
yourNavigationController.tabBarItem.title = @"Tab Bar Title";
...
}
몇 가지 빠른 테스트에 따르면이 두 대리자 작업은 느슨한 경우를 처리해야하며 탭을 전환하거나 탐색 컨트롤러에서 탐색 할 때 제목을 업데이트합니다. 완전성을 위해 didShowViewController 에서도 제목을 업데이트 할 수 있지만 내가 본 것을 기반으로 할 때 필요하지 않다고 생각합니다.
여기에 UIViewController에 대한 확장을 만들었습니다.
import UIKit
extension UIViewController {
/// Setting the navigation title and tab bar title
///
/// - Parameters:
/// - navigationTitle: Navigation title
/// - tabBarTitle: TabBar title
func setTitles(navigationTitle: String, tabBarTitle: String) {
// Order is important here!
title = tabBarTitle
navigationItem.title = navigationTitle
}
}
그런 다음 컨트롤러에서 :
override func viewDidLoad() {
super.viewDidLoad()
setTitles(navigationTitle: "Login", tabBarTitle: "Home")
}