Переименовать вкладки во время выполнения
-
29-09-2019 - |
Вопрос
У меня есть приложение для панели вкладок, которое должно отображаться на разных языках в зависимости от предпочтений пользователя, но я не могу найти много информации о том, как изменить имена вкладок во время выполнения. Мне нужны вкладки, чтобы показать правильные имена при запуске, а не при обращении к вкладкам.
Лучшая информация, которую я мог найти
self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";
из приложения делегата, но это сначала делает вкладку активной, а затем устанавливает имя.
Разве нет лучшего способа установить имена вкладок во время выполнения? В идеале я хотел бы установить их все за один раз.
Решение 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
Другие советы
Если у вас есть ссылка на Uitabbar, вы можете использовать что -то вроде:
for (UITabBarItem *tabBarItem in tabBar)
{
tabBarItem.title = NSLocalizedString(...);
}
Я предлагаю вам локализовать ваш файл XIB:
- Щелкните правой кнопкой мыши на свой файл XIB
- "Получить информацию"
- Вкладка «Общее» в верхней части
- «Сделай файл локализовать» внизу внизу
- Вернуться к вкладке «Общие» в верхней части
- Кнопка «Добавить локализацию» внизу + введите желаемую локаль (например, «en», «fr», «он», «ru» и т. Д.)
Повторите последний шаг, пока у вас не будет всех запрошенных языков.
Я предпочитаю использовать «en» вместо «английского» по умолчанию, который создается автоматически - если вы предпочитаете «en», то в конце концов удалите «английский» ...
Теперь вы можете ввести разные названия на вкладки для каждого локали ...
То, как я это сделал, определяет розетки в делегате приложения:
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 должным образом.
Я использую:
NSArray *itemsTabBar = [[NSArray alloc] initWithArray:[self.tabBarController.tabBar items]];
[[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
[[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];