【发布时间】:2011-11-08 06:44:01
【问题描述】:
我正在使用这个 [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;
}
}
【问题讨论】:
标签: xcode4 uitabbaritem