Iphone 在运行时重命名选项卡

Iphone 在运行时重命名选项卡,iphone,runtime,uitabbaritem,Iphone,Runtime,Uitabbaritem,我有一个选项卡栏应用程序,它必须根据用户的偏好以不同的语言显示,但我找不到关于如何在运行时更改选项卡名称的更多信息。我需要标签在启动时显示正确的名称,而不是在访问标签时 我能找到的最好的信息是跑步 self.tabBarController.selectedIndex = 1; tabBarController.selectedViewController.tabBarItem.title = @"Tab Name"; 从应用程序委托,但这首先使选项卡处于活动状态,然后设置名称 没有更好的方法

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

我能找到的最好的信息是跑步

self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";
从应用程序委托,但这首先使选项卡处于活动状态,然后设置名称


没有更好的方法在运行时设置选项卡名称吗?理想情况下,我希望一次完成所有设置。

如果您有对UITabBar的引用,您可以使用以下内容:

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

我建议您将XIB文件本地化:

  • 右键单击您的XIB文件
  • “获取信息”
  • 顶部的“常规”选项卡
  • 底部的“使文件可本地化”按钮
  • 返回顶部的“常规”选项卡
  • 底部的“添加本地化”按钮+输入所需的区域设置(例如“en”、“fr”、“he”、“ru”等)
重复最后一步,直到您拥有所有请求的语言。
我更喜欢使用“en”而不是自动创建的默认“English”-如果你也喜欢“en”,那么最后删除“English”


现在,您可以为每个区域设置的选项卡输入不同的标题…

这两个响应对我不起作用,我最终这样做了:

// 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

我这样做的方式是在应用程序代理中定义插座:

IBOutlet UITabBarItem *tabBarItem1;
IBOutlet UITabBarItem *tabBarItem2;
IBOutlet UITabBarItem *tabBarItem3;
IBOutlet UITabBarItem *tabBarItem4;
然后,在连接IB的插座后,将其放入
-(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项

[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"];

本地化是否默认为手机上设置的语言,即用户无法选择他们的首选语言,而是自动为他们选择?我这样问是因为在瑞士,人们会说多种语言,所以可能会有人,比如说,他们的语言环境是德语,但他们更喜欢意大利语。本地化是否允许这样做?据我所知,所有应用程序的当前语言环境都是单一的-您在“常规设置”中设置的语言环境…为什么不使用内置本地化,即
NSLocalizedString(@“HOME”,nil)
将返回本地化字符串中指定的每个条目的值。正如@XabierArrabal所说,这实际上是不必要的。只需使用NSLocalized字符串和字符串文件来本地化你的应用程序。为了提高你的回答质量,请包括你的帖子将如何/为什么解决这个问题。