Frage

Ich habe eine Tab-Bar-App, die je nach Präferenz eines Benutzers in verschiedenen Sprachen angezeigt wird, aber ich kann nicht viele Informationen finden, wie die Registerkartennamen zur Laufzeit geändert werden können. Ich brauche die Registerkarten, um die richtigen Namen beim Start anzuzeigen, nicht wenn auf die Registerkarten zugegriffen werden.

Die besten Informationen, die ich finden konnte, war das Laufen

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

Aus dem App -Delegierten ist dies zuerst aktiv und legt dann den Namen fest.

Gibt es keinen besseren Weg, um die Registerkartennamen zur Laufzeit festzulegen? Idealerweise würde ich sie alle auf einmal einstellen.

War es hilfreich?

Lösung 2

Die 2 Antworten funktionierten bei mir nicht, ich habe es schließlich so gemacht:

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

Andere Tipps

Wenn Sie einen Verweis auf die Uitabbar haben, können Sie so etwas verwenden wie:

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

Ich empfehle Ihnen, Ihre XIB -Datei zu lokalisieren:

  • Klicken Sie mit der rechten Maustaste auf Ihre XIB -Datei
  • "Informationen bekommen"
  • Registerkarte "General" oben oben
  • Schaltfläche "Datei lokalisierbar machen" unten
  • Zurück zur Registerkarte "General" oben oben
  • "Schaltfläche" Lokalisierung hinzufügen "im unteren + Eingeben Sie das gewünschte Gebietsschema (zB" en "," fr "," er "," ru "usw.)

Wiederholen Sie den letzten Schritt, bis Sie alle angeforderten Sprachen haben.
Ich bevorzuge es, "eN" anstelle des Standards "Englisch" zu verwenden, das automatisch erstellt wird - wenn Sie "en" auch bevorzugen, dann löschen Sie das "Englisch" am Ende ...

Jetzt können Sie für jedes Gebietsschema verschiedene Titel in die Registerkarten eingeben ...

Ich habe es getan, indem ich Outlets im App -Delegierten definiert habe:

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

und dann, nachdem sie die Verkaufsstellen bei IB angeschlossen haben - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions :

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

Es funktioniert, aber ich bin auch nicht zufrieden damit - aus irgendeinem Grund kann ich keine lokalisierbare MainWindow.xib ordnungsgemäß funktionieren.

Ich benutze:

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

    [[itemsTabBar objectAtIndex:0] setTitle:@"Contacts"];
    [[itemsTabBar objectAtIndex:1] setTitle:@"Settings"];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top