在运行时重命名选项卡

时间:2010-06-22 07:28:16

标签: iphone runtime uitabbaritem

我有一个标签栏应用程序,必须根据用户的偏好显示不同的语言,但我找不到有关如何在运行时更改选项卡名称的详细信息。我需要选项卡在启动时显示正确的名称,而不是在访问选项卡时显示。

我能找到的最佳信息正在运行

self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";
来自app delegate的

但这首先使标签处于活动状态&然后设置名称。

在运行时没有更好的方法来设置标签名称吗?理想情况下,我想一次性设置它们。

5 个答案:

答案 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文件:

  • 右键单击您的XIB文件
  • “获取信息”
  • 顶部的“常规”标签
  • 底部的“使文件可本地化”按钮
  • 返回顶部的“常规”标签
  • “添加本地化”按钮位于底部+输入您想要的区域设置(例如“en”,“fr”,“he”,“ru”等。)

重复最后一步,直到获得所有要求的语言 我更喜欢使用“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"];