在运行时重命名选项卡
Posted
技术标签:
【中文标题】在运行时重命名选项卡【英文标题】:Rename tabs at run-time 【发布时间】:2010-06-22 07:28:15 【问题描述】:我有一个标签栏应用程序,它必须根据用户的偏好以不同的语言显示,但我找不到太多关于如何在运行时更改标签名称的信息。我需要标签在启动时显示正确的名称,而不是在访问标签时。
我能找到的最佳信息是运行
self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";
来自应用委托,但这首先使选项卡处于活动状态,然后设置名称。
有没有更好的方法在运行时设置选项卡名称?理想情况下,我想一次性设置它们。
【问题讨论】:
【参考方案1】:如果你有对 UITabBar 的引用,你可以使用类似的东西:
for (UITabBarItem *tabBarItem in tabBar)
tabBarItem.title = NSLocalizedString(...);
【讨论】:
【参考方案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
【讨论】:
为什么不使用内置本地化,即NSLocalizedString (@"HOME", nil)
将返回本地化字符串中指定的每个条目的值
正如@XabierArrabal 所说,这真的没有必要。只需使用 NSLocalized 字符串和字符串文件来本地化您的应用程序。【参考方案3】:
我建议你本地化你的 XIB 文件:
右键单击您的 XIB 文件 “获取信息” 顶部的“常规”标签 底部的“使文件可本地化”按钮 返回顶部的“常规”标签 底部的“添加本地化”按钮+输入您想要的语言环境(例如“en”、“fr”、“he”、“ru”等)重复最后一步,直到获得所有请求的语言。 我更喜欢使用“en”而不是自动创建的默认“English” - 如果您也喜欢“en”,那么最后删除“English”......
现在您可以为每个区域设置的选项卡输入不同的标题...
【讨论】:
本地化是否默认为手机上设置的内容,即用户无法选择他们喜欢的语言,它会自动为他们选择?我问是因为在瑞士,人们会说多种语言,所以可能有人,例如,他们的语言环境是德语,但他们更喜欢意大利语。本地化是否允许这样做? 据我所知,所有应用程序的当前区域设置都是单一的 - 您在常规设置中设置的那个...【参考方案4】:我的做法是在应用委托中定义插座:
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 正常工作..
【讨论】:
【参考方案5】:我正在使用:
NSArray *itemsTabBar = [[NSArray alloc] initWithArray:[self.tabBarController.tabBar items]];
[[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
[[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];
【讨论】:
为了提高您的回答质量,请说明您的帖子将如何/为何解决问题。以上是关于在运行时重命名选项卡的主要内容,如果未能解决你的问题,请参考以下文章
javascript 在提交联系表单7时重定向到URL,将以下代码放入您要重定向的表单上的“其他设置”选项卡中
将多个.xls文件添加到单个.xls文件中,使用文件名命名选项卡