как изменить заголовок uiviewcontroller независимо от заголовка элемента tabbar



Я устанавливаю мой вид контроллеры название, как это в виду сделал загрузку:



self.title = @"my title";


перед этим я установил заголовок в story boards для контроллера вида и навигационного контроллера, в который он встроен. Я установил его в: "название";



когда я нажимаю на вкладку, которая содержит контроллер вида название элемента панели вкладок и uiviewcontroller изменить на: мой заголовок



Я хотел бы, чтобы контроллер вида изменился, но элемент панели вкладок остался с заголовком: Название



Как я могу это сделать?

599   8  

8 ответов:

похоже, вы хотите, чтобы заголовок в панели навигации изменился, но не тот, который находится на панели вкладок. Так и должно быть.

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

Swift:

self.navigationItem.title = "My Title"

Так что для тех, кто до сих пор не получил его (как я)

self.navigationItem.title = @"my title"; наборы панель навигации название.

self.tabBarItem.title = @"my title"; наборы бар название.

self.title = @"my title"; наборы оба эти.

на Свифт использовать это,

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

Свифт

Set top bar title

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

вкладка название пункт

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

установить оба титула

self.title = "both titles"

Примечание: Если у вас есть контроллер панели вкладок с навигационными контроллерами в корне каждого контроллера вида, установка элемента панели вкладок на контроллерах вида не повлияет на заголовок, Если вы устанавливаете navigationItem.title. Вам нужно будет установить tabBarItem на навигационный контроллер вместо того, чтобы он был поднят с контроллера панели вкладок.

ни один из ответов, опубликованных другими, не работал для меня, потому что все контроллеры представления моей вкладки имеют навигацию контроллеры там корень - это общий шаблон иерархии для UITabBarController. Вы должны установить навигационный контроллер tabBarItem вместо того, чтобы получить название, чтобы показать по-другому от navigationItem's title

вы можете создать свой tabBarItem и связать их с вашим VC непосредственно так.

    let tabBarVCOne = BooksListViewController()
    tabBarVCOne.tabBarItem = UITabBarItem(title: "Books", image: nil, tag: 0)

    tabBarViewControllers.append(tabBarVCOne)
    ...

тогда у тебя будет что-то вроде этого: личность.viewControllers = tabBarViewControllers.карте(UINavigationController.init)

    //Wrap each view controller in a navigation controller. 
    self.viewControllers = tabBarViewControllers.map(UINavigationController.init)

но это должно быть изменен на следующее, чтобы захватить уже связанный tabBarItem из контроллера вида и установите его на навигационный контроллер автоматически.

    self.viewControllers = tabBarViewControllers.map({
        let navigationController =   UINavigationController.init(rootViewController: )
        navigationController.tabBarItem = .tabBarItem
        return navigationController
    })

теперь вы сможете иметь другой заголовок (установленный из вашего VC) отдельно от заголовка, определенного для вашего tabBarItem.

Я верю в viewDidLoad метод контроллера вида вы можете сделать:

self.title = @"my title";
self.tabBarItem.title = @"tab title";

довольно поздно для этого. Вы можете использовать свой 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 также, но основываясь на том, что я видел, я не думаю, что это необходимо.

наверное немного опоздал (а).

установка названия VC изменяет название навигации и панели вкладок. (если VC уже подключен к обоим).

Если вы хотите иметь отдельные заголовки, вам нужно вручную установить их, вы обычно устанавливаете заголовок для VC, а затем конкретно заголовок tabBarItem, так как это свойство

Comments

    Ничего не найдено.