Установить заголовок UITabBarItem программно? - PullRequest
6 голосов
/ 15 июня 2011

Мое приложение основано на архитектуре панели вкладок.Чтобы иметь простую механику интернационализации, я не пишу никаких строк в файлах XIB.viewdidload позволяет программно изменять строки в представлениях.

Когда мое приложение запускается, я вижу 4 вкладки.Но на самом деле только первый загружает свой контроллер вида.Остальные ждут загрузки клика пользователя.Название вкладки можно изменить с помощью [self setTitle: @ "Mouhahaha"];в viewDidLoad загруженного контроллера представления.

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

Я ищу способ установить этот заголовок программно для каждого вкладка.У вас есть подсказки?

Большое спасибо.

kheraud

Ответы [ 2 ]

3 голосов
/ 21 июня 2012

Мой предпочтительный метод сделать это программно вместе с раскадровкой - сделать подкласс UITabBarController, чтобы моя сцена контроллера панели вкладок в моей раскадровке использовала новый подкласс (с 3 UIViewController связями от контроллера панели вкладок до нужный контроллер вида в случае ниже), а затем переопределить viewWillAppear:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSArray* titleKeys = [NSArray arrayWithObjects:@"top places", 
                                                   @"localizablekey1",
                                                   @"localizablekey2",
                                                   @"localizablekey3",
                                                   nil];
    [super viewWillAppear:animated];
    int count = 0; for (UIViewController* viewController in self.viewControllers)
        viewController.tabBarItem.title = NSLocalizedString([titleKeys objectAtIndex:count++], nil);
}
1 голос
/ 15 июня 2011

Все, что вам нужно сделать, это сделать экземпляр UITabBarController, затем выделить любые представления, которые вы хотите в нем, а затем установить представления UITabBarController.Убедитесь, что ваш TabBarController - тот, который виден.Также убедитесь, что любые viewControllers, которые вы хотите на панели вкладок, импортируются с помощью #import.

UITabBarController *c = [self tabBarController];
SecondViewController *s = [[SecondViewController alloc] init];
[s setTitle:@"Whatever"];
c.viewControllers = [NSArray arrayWithObjects:self, s, nil];
[s release];

Поместите это в метод viewDidLoad первого выделенного контроллера.

В качестве альтернативы вы можетепросто измените способ, которым ваш ApplicationDelegate настраивает TabBarController, но я не буду вдаваться в подробности.

Надеюсь, это поможет

...