jak zmienić tytuł uiviewcontroller niezależnie od tytułu elementu tabbar

Ustawiam tytuł kontrolerów widoku w widoku did load:

self.title = @"my title";

Wcześniej ustawiłem tytuł na tablicach fabularnych dla kontrolera widoku i kontrolera nawigacji, w którym jest osadzony. Ustawiłem na: "Title";

Po kliknięciu na zakładkę trzymającą kontroler widoku tytuł elementu paska kart i uiviewcontroller zmienić na: mój tytuł

Chciałbym, aby kontroler widoku się zmienił, ale pozycja paska kart pozostanie z tytułem: Title

Jak mogę osiągnąć to?

Author: rmaddy, 2014-02-07

8 answers

Wygląda na to, że chcesz zmienić tytuł na pasku nawigacji, ale nie tytuł na pasku kart. To powinno wystarczyć.

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

Swift:

self.navigationItem.title = "My Title"
 154
Author: Clever Error,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-01 14:23:56

Więc dla tych, którzy nadal tego nie rozumieją (jak ja)

self.navigationItem.title = @"my title"; ustawia pasek nawigacji tytuł.

self.tabBarItem.title = @"my title"; ustawia Pasek tabulacji tytuł.

self.title = @"my title"; zestawy oba te .

 130
Author: Simon Epskamp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-23 13:13:21

Dla Swift Użyj tego,

self.navigationItem.title = "Navigation bar title" 
self.title = "Tab bar title"
 7
Author: Zaid Pathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-12 05:52:27

Swift

Ustaw górny tytuł paska

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

Set tab item title

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

Ustaw oba tytuły

self.title = "both titles"
 7
Author: Suragch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-16 07:00:49

Uwaga: Jeśli masz kontroler paska kart z kontrolerami nawigacyjnymi w katalogu głównym każdego kontrolera widoku, ustawienie elementu paska kart w kontrolerach widoku nie wpłynie na tytuł, jeśli ustawiasz navigationItem.title. Zamiast tego musisz ustawić tabBarItem na kontrolerze nawigacyjnym, aby mógł być pobrany z kontrolera paska kart.

Żadna z odpowiedzi zamieszczonych przez innych nie zadziałała dla mnie, ponieważ Kontrolery widoku paska kart mają Kontrolery nawigacji w korzeniu - jest to wspólny wzorzec hierarchii dla UITabBarController. Musisz zamiast tego ustawić tabBarItem kontrolera nawigacji, aby Tytuł wyświetlał się inaczej niż tytuł navigationItem

Możesz utworzyć swoje tabBarItem i powiązać je bezpośrednio z VC w ten sposób.

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

    tabBarViewControllers.append(tabBarVCOne)
    ...

Wtedy będziesz miał coś takiego: siebie.viewControllers = tabBarViewControllers.Mapa (UINavigationController.init)

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

Ale to powinno być zmienione na następujące, aby chwycić już powiązane tabBarItem z kontrolerem widoku i automatycznie ustawiane na kontrolerze nawigacyjnym.

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

Teraz będziesz mógł mieć inny tytuł (ustawiony z twojego VC) oddzielony od tytułu zdefiniowanego dla twojego tabBarItem.

 3
Author: Pavan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-10 01:51:26

Wierzę w viewDidLoad metodę kontrolera widoku, którą możesz zrobić:

self.title = @"my title";
self.tabBarItem.title = @"tab title";
 0
Author: rmaddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-06 22:45:08

Dość późno. TabBarController może służyć jako UITabBarControllerDelegate i UINavigationControllerDelegate dla siebie i kontrolery nawigacyjne osadzone odpowiednio w każdej z kart.

.h:

@interface YourTabBarController : UITabBarController <UITabBarControllerDelegate, UINavigationControllerDelegate>

@end

.m:

- (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";
    ...
}

W oparciu o szybkie testy, wydaje się, że te dwie akcje delegowania powinny obejmować luźne przypadki i zaktualizują tytuł, niezależnie od tego, czy przełączasz karty, czy przeglądasz Kontroler nawigacyjny. Dla kompletności, możesz również zaktualizować swój tytuł w didShowViewController , ale bazując na tym, co widziałem, nie sądzę, że jest to konieczne.

 0
Author: Ruiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 15:08:12

Prawdopodobnie trochę późno (ale).

Ustawienie tytułu VC zmienia tytuł nawigacji i paska kart. (jeśli VC jest już dołączony do obu).

Jeśli chcesz mieć oddzielne tytuły, musisz je ręcznie ustawić, Zwykle ustawiasz tytuł dla VC, a następnie konkretnie tytuł tabbaritu, ponieważ jest to właściwość

 0
Author: wolffan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 10:17:45