我有一个标签栏应用程序,必须根据用户的偏好显示不同的语言,但我找不到有关如何在运行时更改选项卡名称的详细信息。我需要选项卡在启动时显示正确的名称,而不是在访问选项卡时显示。
我能找到的最佳信息正在运行
self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";
来自app delegate的但这首先使标签处于活动状态&然后设置名称。
在运行时没有更好的方法来设置标签名称吗?理想情况下,我想一次性设置它们。
答案 0 :(得分:2)
如果你有对UITabBar的引用,你可以使用类似的东西:
for (UITabBarItem *tabBarItem in tabBar)
{
tabBarItem.title = NSLocalizedString(...);
}
答案 1 :(得分: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
答案 2 :(得分:1)
我建议你本地化你的XIB文件:
重复最后一步,直到获得所有要求的语言 我更喜欢使用“en”而不是自动创建的默认“英语” - 如果您更喜欢“en”,那么最后删除“英语”......
现在,您可以为每个区域设置的标签输入不同的标题...
答案 3 :(得分:1)
我这样做的方法是在app delegate中定义出口:
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正常工作..
答案 4 :(得分:0)
我正在使用:
NSArray *itemsTabBar = [[NSArray alloc] initWithArray:[self.tabBarController.tabBar items]];
[[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
[[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];