【问题标题】:Rename tabs at run-time在运行时重命名选项卡
【发布时间】:2010-06-22 07:28:15
【问题描述】:

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

我能找到的最佳信息是运行

self.tabBarController.selectedIndex = 1;
tabBarController.selectedViewController.tabBarItem.title = @"Tab Name";

来自应用委托,但这首先使选项卡处于活动状态,然后设置名称。

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

【问题讨论】:

    标签: iphone runtime uitabbaritem


    【解决方案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"];
        

        【讨论】:

        • 为了提高您的回答质量,请说明您的帖子将如何/为何解决问题。
        猜你喜欢
        • 2015-01-16
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 2021-12-05
        • 2020-11-30
        相关资源
        最近更新 更多