탭바 항목 제목과 무관하게 uiviewcontroller 제목을 변경하는 방법


104

뷰에서 다음과 같이 뷰 컨트롤러 제목을 설정하고 있습니다.

self.title = @"my title";

그 전에 나는 그것이 내장 된 뷰 컨트롤러와 내비게이션 컨트롤러를 위해 스토리 보드에 제목을 설정했습니다. 나는 이것을 "Title"로 설정했습니다.

뷰 컨트롤러가있는 탭을 클릭하면 탭 표시 줄 항목의 제목이 uiviewcontroller다음으로 변경됩니다. 내 제목

보기 컨트롤러를 변경하고 싶지만 탭 표시 줄 항목은 제목 : 제목과 함께 유지됩니다.

어떻게 할 수 있습니까?

답변:


221

탐색 표시 줄의 제목은 변경하고 탭 표시 줄의 제목은 변경하지 않으려는 것 같습니다. 그렇게해야합니다.

[self.navigationItem setTitle:@"my title"];

빠른:

self.navigationItem.title = "My Title"

1
당신은 여전히 당신의 UITabBar 제목을 설정하는 self.title를 사용하는 경우, 그렇지 않으면 한 후 설정 self.navigation의 setTitle이라는으로, 확인은하지 않습니다 일
simon_smiley

2
xcode 9 및 ios 11의 신속한 4에서 제목의 명확한 사용에 오류가 표시됩니다
Sushobhit

1
Swift 4.2를 사용하여 Xcode 10.2에서 저를 위해 일하고 있습니다.
jangelsb

174

그래도 이해하지 못하는 사람들을 위해 (나처럼)

self.navigationItem.title = @"my title";탐색 모음 제목을 설정합니다 .

self.tabBarItem.title = @"my title";탭 표시 줄 제목을 설정합니다 .

self.title = @"my title";두 가지 .


20

빠른

상단 표시 줄 제목 설정

self.navigationController?.navigationBar.topItem?.title = "top title"

탭 항목 제목 설정

self.tabBarController?.tabBar.items?[0].title = "tab title"

두 제목 설정

self.title = "both titles"

무엇입니까 topItem?
imike

2
이것이 내 구성에서 상단 표시 줄 제목을 설정할 수있는 유일한 방법이며 "self.navigationItem.title"이 왜 작동하지 않는지 확실하지 않습니다.
JohnnyC

7

들어 스위프트는 이를 사용,

self.navigationItem.title = "Navigation bar title" 
self.title = "Tab bar title"

xcode 9 및 ios 11의 신속한 4 (self.navigation.title)에서 제목의 명확한 사용에 대한 오류 표시
Sushobhit

6

참고 : 각보기 컨트롤러의 루트에 탐색 컨트롤러가있는 탭 모음 컨트롤러가있는 경우 .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.


0

이것에 꽤 늦었습니다. 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 에서도 제목을 업데이트 할 수 있지만 내가 본 것을 기반으로 할 때 필요하지 않다고 생각합니다.


0

아마 조금 늦었을 것입니다 (그러나).

VC의 제목을 설정하면 Navigation 및 tabBar의 제목이 변경됩니다. (VC가 이미 둘 다에 연결되어있는 경우).

별도의 제목을 갖고 싶다면 수동으로 설정해야합니다. 일반적으로 VC의 제목을 설정 한 다음 특히 tabBarItem의 제목을 설정해야합니다.


0

스위프트 4.2

여기에 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")
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.