2010-06-22 77 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

欢迎任何建议或更正。 – 2010-07-05 13:04:54

+0

它帮助。 +1为什么 – 2012-03-02 19:32:55

+1

为什么不使用内置本地化,即'NSLocalizedString(@“HOME”,nil)'将返回本地化字符串中指定的每个条目的值 – spacebiker 2012-03-15 22:18:34

2

如果你有到UITabBar的引用,你可以使用类似:

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

我建议你本地化您XIB文件:在你的XIB文件

  • 右键
  • “获取信息”
  • 顶部的“常规”选项卡
  • “使文件可以本地化”按钮在t他底部
  • 返回顶部的“常规”选项卡
  • 底部的“添加本地化”按钮+输入您想要的区域设置(例如, “en”,“fr”,“he”,“ru”等)

重复最后一步,直到获得所有请求的语言。
我更愿意用“恩”,而不是自动创建默认的“英语” - 如果你喜欢“恩”也那么到底删除“英语” ......

现在,你可以输入不同的标题该选项卡每个区域设置...

+0

不本地化默认设置的内容在手机上,即用户无法选择自己喜欢的语言,它会自动为他们选择? 我问,因为在瑞士,人们是多种语言的,所以可能会有人,例如,当地人是德国人,但他们更喜欢意大利人。本地化会允许吗? – 2010-06-24 15:16:11

+1

据我所知,当前的语言环境对于所有应用程序是单一的 - 您在常规设置中设置的语言环境... – 2010-06-24 20:08:05

1

的方式我做到了,是在应用程序的委托定义网点:

IBOutlet UITabBarItem *tabBarItem1; 
IBOutlet UITabBarItem *tabBarItem2; 
IBOutlet UITabBarItem *tabBarItem3; 
IBOutlet UITabBarItem *tabBarItem4; 

,然后在IB连接插座,puting这- (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

为了提高答案的质量,请包括如何/为什么您的文章将解决问题。 – 2012-10-06 03:34:43