2010-11-26 29 views
1

Lorsque mon application est chargée, je souhaite la modifier sur l'un des onglets en fonction d'un paramètre enregistré défini par l'utilisateur lors de la dernière exécution de l'application. Je suis capable de changer l'image lorsque l'utilisateur clique sur l'onglet qui exécute la méthode ViewDidLoad de viewcontroller de cet onglet. voir ci-dessous:iPhone, UITabBarItem: modifier dynamiquement l'image d'une barre d'onglets lorsque l'application démarre

UITabBarItem *tabItem; 
if (condition = YES) { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter plus.png"] tag:self.view.tag]; 
} 
else { 
    tabItem = [[UITabBarItem alloc] initWithTitle:@"Filter" image:[UIImage imageNamed:@"filter.png"] tag:self.view.tag]; 
} 
self.navigationController.tabBarItem = tabItem; 
[tabItem release]; 
[super viewDidLoad]; 

Mais je suis incapable de comprendre comment accéder et de modifier l'UITabBarItem de cet onglet dans le contrôleur de vue racine de l'application lors de son chargement. Voir la méthode viewdidload du contrôleur de vue racine ci-dessous. Quand cela n'a pas fonctionné j'ai essayé plusieurs autres manières d'accéder et de changer le uitabbaritem mais rien n'a fonctionné. J'ai essayé de créer IBOutLets dans le contrôleur de vue racine à UITabBarItem et UINavigationController.

// tb is an iboutlet to the UITabBarItem 
self.tb = tabItem; 

// nc is an iboutlet to the UINavigationController 
self.nc.tabBarItem = tabItem; 

en vain. Une idée de comment faire cela?

Répondre

2

Je l'ai compris. J'ai juste besoin d'appeler la méthode setImage de l'UITabBarItem.

//UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
if (condition == YES) { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter plus.png"]]; 
    // [filterTab setImage:[UIImage imageNamed:@"filter plus.png"]];   
} 
else { 
    [[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
    //[filterTab setImage:[UIImage imageNamed:@"filter.png"]]; 
} 

question complémentaire: est-il une raison ou un avantage d'attribuer le tabbaritem à un pointeur d'abord, puis la mise en l'image?

UITabBarItem *filterTab = [self.tabBar.items objectAtIndex:2]; 
[filterTab setImage:[UIImage imageNamed:@"filter plus.png"]]; 

par rapport à le faire dans une ligne de code comme suit?

[[self.tabBar.items objectAtIndex:2] setImage:[UIImage imageNamed:@"filter.png"]]; 
+1

Le principal avantage est qu'il facilite la lecture du code. –

1

Je pense que vous devez essayer celui-ci, espérons que cela aidera,

je changer l'image tabbatitem sélectionnée comme -

dans le contrôleur TabBar méthode déléguée

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

{ 
    if([tabBarController selectedIndex] == 0) 
    { 
     [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 
    }  
} 

Grâce à cela, vous pouvez changer votre image.

Ou vous pouvez utiliser directement dans votre point de vue des contrôleurs init (ou viewWillAppear) méthode, comme

 [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]]; 

Essayez !!!!