Переименовать вкладки во время выполнения - PullRequest
2 голосов
/ 22 июня 2010

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

Лучшая информация, которую я мог найти, была запущена

self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";

от делегата приложения, но сначала активируется вкладка, а затем задается имя.

Нет ли лучшего способа задать имена вкладок во время выполнения? В идеале я хотел бы установить их все за один раз.

Ответы [ 5 ]

2 голосов
/ 05 июля 2010

2 ответа у меня не сработали, в итоге я сделал это так:

// Create temp strings to hold tab names
NSString *tab0Name;
NSString *tab1Name;
NSString *tab2Name;
NSString *tab3Name;
NSString *tab4Name;

// Set strings according to language
if ([UIAppDelegate.iStegAppLanguage isEqualToString:@"FR"])
{
    tab0Name = @"Accueil";
    tab1Name = @"Produits";
    tab2Name = @"Caisse";
    tab3Name = @"Branches";
    tab4Name = @"Plus";
}
else if ([UIAppDelegate.iStegAppLanguage isEqualToString:@"IT"])
{
    tab0Name = @"Home";
    tab1Name = @"Prodotti";
    tab2Name = @"Checkout";
    tab3Name = @"Filiali";
    tab4Name = @"More";
}
else if ([UIAppDelegate.iStegAppLanguage isEqualToString:@"EN"])
{
    tab0Name = @"Home";
    tab1Name = @"Products";
    tab2Name = @"Checkout";
    tab3Name = @"Branches";
    tab4Name = @"More";
}
else    // Default to german unless specifically set to another language
{
    tab0Name = @"Home";
    tab1Name = @"Produkte";
    tab2Name = @"Checkout";
    tab3Name = @"Filialen";
    tab4Name = @"Mehr";
}

// Set tab name
self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = tab1Name;
self.tabBarController.selectedIndex = 2;
tabBarController.selectedViewController.tabBarItem.title = tab2Name;
self.tabBarController.selectedIndex = 3;
tabBarController.selectedViewController.tabBarItem.title = tab3Name;
self.tabBarController.selectedIndex = 4;
tabBarController.selectedViewController.tabBarItem.title = tab4Name;
self.tabBarController.selectedIndex = 0;
tabBarController.selectedViewController.tabBarItem.title = tab0Name;    // Home last so it's shown first
2 голосов
/ 22 июня 2010

Если у вас есть ссылка на UITabBar, вы можете использовать что-то вроде:

for (UITabBarItem *tabBarItem in tabBar)
{
  tabBarItem.title = NSLocalizedString(...);
}
1 голос
/ 30 сентября 2010

Я сделал это, определив розетки в делегате приложения:

IBOutlet UITabBarItem *tabBarItem1;
IBOutlet UITabBarItem *tabBarItem2;
IBOutlet UITabBarItem *tabBarItem3;
IBOutlet UITabBarItem *tabBarItem4;

, а затем, после соединения розеток в IB, установил значение - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:

[tabBarItem1 setTitle:NSLocalizedString(@"tab1", @"")];
[tabBarItem2 setTitle:NSLocalizedString(@"tab2", @"")];
[tabBarItem3 setTitle:NSLocalizedString(@"tab3", @"")];
[tabBarItem4 setTitle:NSLocalizedString(@"tab4", @"")];

Это работает, но меня это тоже не устраивает - по какой-то причине я не могу получить корректно работающий локализуемый MainWindow.xib ..

1 голос
/ 22 июня 2010

Я предлагаю вам локализовать файл XIB:

  • Щелкните правой кнопкой мыши файл XIB
  • «Получить информацию»
  • Вкладка «Общие» вверху
  • Кнопка «Сделать файл локализуемым»внизу
  • Вернуться на вкладку «Общие» вверху
  • Кнопка «Добавить локализацию» внизу + ввести нужный язык (например, «en», «fr», «he"," ru "и т. д.)

Повторяйте последний шаг, пока не получите все запрошенные языки.Я предпочитаю использовать «en» вместо стандартного «английского», который создается автоматически - если вы предпочитаете «en», то в конце удалите «английский» ...

Теперь вы можете вводить разные названияна вкладки для каждой локали ...

0 голосов
/ 01 августа 2012

Я использую:

NSArray *itemsTabBar = [[NSArray alloc] initWithArray:[self.tabBarController.tabBar items]];

    [[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
    [[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];
...