2010-06-22 4 views
2

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

Лучший информацию я смог найти бегала

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

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

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

ответ

2

в 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 
+0

Любые предложения или исправления приветствуются. –

+0

Это помогло. +1 для вас –

+1

Почему бы не использовать встроенную локализацию, то есть NSLocalizedString (@ "HOME", nil) 'вернет значение для каждой записи, указанной в строке локализации – spacebiker

2

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

for (UITabBarItem *tabBarItem in tabBar) 
{ 
    tabBarItem.title = NSLocalizedString(...); 
} 
1

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

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

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

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

+0

не локализации по умолчанию, что установлен на телефоне, т.е. пользователь не может выбрать предпочитаемый язык, он автоматически выбирается для них? Я спрашиваю, потому что здесь, в Швейцарии, люди многоязычны, поэтому может быть кто-то, например, немецкий язык, но они предпочитают итальянский. Может ли локализация разрешить это? –

+1

Насколько я знаю, текущий язык является единым для всех приложений - тем, который вы установили в общих настройках ... –

1

то, как я сделал это путь определения точек в приложении делегат :

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 работает нормально ..

0

Я использую:

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

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

Чтобы улучшить качество ответа, пожалуйста, укажите, как/почему ваше сообщение решит проблему. –

Смежные вопросы