Pregunta

Tengo una aplicación de barra de pestañas que tiene que mostrar en diferentes idiomas dependiendo de la preferencia de un usuario, pero no puedo encontrar mucha información sobre cómo cambiar los nombres de pestañas en tiempo de ejecución. Necesito las pestañas para mostrar los nombres correctos al inicio, no cuando se accede a las pestañas.

La mejor información que pude encontrar se estaba ejecutando

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

Desde el delegado de la aplicación, pero esto primero hace la pestaña activa y luego establece el nombre.

¿No hay una mejor manera de establecer nombres de pestañas en tiempo de ejecución? Idealmente, me gustaría establecerlos todos de una vez.

¿Fue útil?

Solución 2

Las 2 respuestas no funcionaron para mí, finalmente lo hice así:

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

Otros consejos

Si tiene una referencia al uitabbar, puede usar algo como:

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

Le sugiero que localice su archivo XIB:

  • Haga clic derecho en su archivo XIB
  • "Conseguir información"
  • Pestaña "General" en la parte superior
  • El botón "Hacer archivo localizable" en la parte inferior
  • Volver a la pestaña "General" en la parte superior
  • Botón "Agregar localización" en la parte inferior + Ingrese la ubicación que desea (por ejemplo, "en", "fr", "él", "ru" etc.)

Repita el último paso hasta que tenga todos los idiomas solicitados.
Prefiero usar "EN" en lugar del "inglés" predeterminado que se crea automáticamente: si prefiere "EN" también, elimine el "inglés" al final ...

Ahora puede ingresar diferentes títulos en las pestañas para cada localidad ...

La forma en que lo hice es definiendo salidas en el delegado de la aplicación:

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

Y luego, después de conectar los puntos de venta en IB, poniendo esto para - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions :

[tabBarItem1 setTitle:NSLocalizedString(@"tab1", @"")];
[tabBarItem2 setTitle:NSLocalizedString(@"tab2", @"")];
[tabBarItem3 setTitle:NSLocalizedString(@"tab3", @"")];
[tabBarItem4 setTitle:NSLocalizedString(@"tab4", @"")];

Funciona pero tampoco estoy contento con eso, por alguna razón no puedo obtener un mainwindow.xib localizable que funcione correctamente ...

Estoy usando:

NSArray *itemsTabBar = [[NSArray alloc] initWithArray:[self.tabBarController.tabBar items]];

    [[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
    [[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top