2013-05-23 4 views
1

У меня есть приложение с контроллером панели вкладок. Одним из таких видов является представление таблицы. Существует способ установки значка этого представления на панели вкладок. Это работает ... но только тогда, когда пользователь коснется этого представления, а не сразу после запуска приложения. Поэтому я попытался использовать этот метод в appDelegate ... но это не работает. мой метод в представлении:Перезагрузка значка tab bar item

@property (strong) NSMutableArray *cars; 
//some code here 

    -(void)SelectBadge 
    { 
     int r = [_cars count]; 
     if (r == 0) { 
      self.navigationController.tabBarItem.badgeValue = 0; 
     } 
     else { 
     self.navigationController.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d", r]; 
     } 
     [self.tableView reloadData]; 
    } 

Я пытался поставить этот метод в моем AppDelegate файле:

- (void)applicationDidBecomeActive:(UIApplication *)application 
{  
    CarList *Instance = [[CarList alloc] init]; 
    [Instance SelectBadge]; 
} 

Благодаря все ваши ответы заранее.

ответ

1

Как я вижу, вы создаете новый интерфейс CarList в этом - (void)applicationDidBecomeActive:(UIApplication *)application method. Так что в функции selectBadge self.navigationController.tabBarItem.badgeValue = someValue; будет устанавливать значение значка для другого экземпляра.

Попробуйте обратиться к правильному экземпляру. Если вы можете получить доступ к экземпляру UITabBarController, то вы можете сделать это:

UITabBar  *tabBar = mTabBarController.tabBar; 
UITabBarItem *someItem = [tabBar.items objectAtIndex:0];////You can put your interested tabBarItem index 
someItem. badgeValue = @"100"; 
+0

ОК, но что такое "mTabBarController"? –

+0

Его экземпляр UITabBarController. Как вы сказали, что у вас есть приложение с контроллером панели вкладок. Я имею в виду этот контроллер панели вкладок – IronMan

0

Предполагая, что ваши ViewControllers загружаются из раскадровки, вызовите функцию для обновления tabBarItem badgeValue в «initWithCoder:» из ViewController которого tabBarItem badgeValue вы хотите обновить. ViewControllers, связанные с вкладками в TabBarController, инициализируются при загрузке TabBar.

Код может выглядеть примерно так:

- (id) initWithCoder:(NSCoder *)aDecoder 
    {  
      self = [super initWithCoder:aDecoder]; 

      NSString* badgeValue = [self calculateBadgeValue]; //your method 
      self.tabBarItem.badgeValue = badgeValue; 

      return self; 
    } 

Если вы это сделаете, значок должен обновлять, когда TabBar становится видимым.

 Смежные вопросы

  • Нет связанных вопросов^_^