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?
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"
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 .
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"
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"
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
.
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";
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.
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ść
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