UITabBarItem.title против UINavigationController.title - PullRequest
5 голосов
/ 11 июля 2011

Я выделил UITabBarItem с заголовком (initWithTitle) и подключил его к UINavigationController.

Я обнаружил, что если корневой контроллер вида контроллера навигации имеет свой собственный заголовок, то этот заголовок навсегда заменяет заголовок, указанный в элементе панели вкладок. Например, если заголовок элементов панели вкладок установлен в значение «ОДИН», а заголовок контроллера корневого представления контроллера навигации установлен в значение «ДВА», элемент панели вкладок всегда показывает «ДВА», а не «ОДИН». Единственный способ показать элемент панели вкладок ONE - вообще не указывать корневой заголовок контроллера навигации.

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

Есть ли способ обойти это?

Ответы [ 3 ]

7 голосов
/ 11 июля 2011

Я часто использую панель навигации с панелью вкладок и почти никогда не имею одинаковый заголовок.Код, который я использовал (в init):

// SET TAB BAR NAME AND IMAGE
[[self tabBarItem] setTitle:@"Short Title"];
[[self tabBarItem] setImage:[UIImage imageNamed:@"MyImage.png"]];

// SET NAVIGATION
[[self navigationItem] setTitle:@"Much Longer Title"];  

Я никогда не сталкивался с проблемой с этим.

3 голосов
/ 11 июля 2011

Ну, вот что я узнал.

Кажется, что если вы делаете:

MainNavController *main = [[MainNavController alloc] init];
UITabBarItem *tabBarItem = [[UITabBarItem alloc] initWithTitle:@"ONE" image:[UIImage imageNamed:@"one.png"] tag:1];
main.tabBarItem = tabBarItem;
[tabBarItem release];

, а затем, в контроллере корневого представления, выдвинутом в main, вы делаете:*

self.title = @"TWO";

то, что происходит, - это то, что я описал выше.

Но я могу это исправить, если добавлю следующую строку в корневой контроллер main:

self.navigationController.tabBarItem.title = @"ONE";

Кажется, это своего рода проблема с выбором времени.

0 голосов
/ 24 июня 2016

UINavigationController является одним из viewControllers из UITabBarController.Поэтому установите tabBarItem.title для UINavigationController, который переопределяет значение для UINavigationController rootViewController.UINavigationController устанавливает заголовок navigationBar на topViewController.title.

...