我正在使用此[tutorial]来保存用户自定义的TabBarItems订单,因为我的应用有超过5个标签
本教程的概念是将TabBarItem标题保存在NSUserDefault中,并在下次打开应用程序时加载它们。
它最适合英语,因为我的TabBarItem标题最初是在XIB文件中设置的
但问题是当加载我的应用程序的其他语言时,因为TabBarItem标题在启动应用程序时更改为所选语言
因此,当重新命名TabBarItems以获得与XIB文件中设置的标题不同的语言时保存标题时,TabBarItem在下次应用程序启动时根本不会加载!我认为我使用的教程只适用于TabBarItem标题,因为它们与XIB文件中定义的TabBarItem标题相同,而不是基于应用程序语言以编程方式更改这些TabBarItem标题时!
- (void)applicationWillTerminate:(UIApplication *)application {
NSMutableArray *savedOrder = [NSMutableArray arrayWithCapacity:tabController.viewControllers.count];
NSArray *tabOrderToSave = tabController.viewControllers;
for (UIViewController *aViewController in tabOrderToSave) {
[savedOrder addObject:aViewController.tabBarItem.title];
}
[[NSUserDefaults standardUserDefaults] setObject:savedOrder forKey:@"savedTabOrder"];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self setTabOrderIfSaved];
}
- (void)setTabOrderIfSaved {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *savedOrder = [defaults arrayForKey:@"savedTabOrder"];
NSMutableArray *orderedTabs = [NSMutableArray arrayWithCapacity:tabController.viewControllers.count];
if ([savedOrder count] > 0 ) {
for (int i = 0; i < [savedOrder count]; i++) {
for (UIViewController *aController in tabController.viewControllers) {
if ([aController.tabBarItem.title isEqualToString:[savedOrder objectAtIndex:i]]) {
aController.tabBarItem.title = NSLocalizedString(aController.tabBarItem.title, nil);
[orderedTabs addObject:aController];
}
}
}
tabController.viewControllers = orderedTabs;
}
}
答案 0 :(得分:1)
请尝试使用tabBarItem
的标记属性。
aController.tabBarItem.tag