Xcode:订购后加载TabBarItem标题

时间:2011-09-25 13:35:56

标签: xcode4 uitabbaritem

我正在使用此[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;
  }
}

1 个答案:

答案 0 :(得分:1)

请尝试使用tabBarItem的标记属性。

aController.tabBarItem.tag