2010-11-22 27 views
6

J'essaie différentes façons de changer l'image d'un UIBarButtonItem une fois qu'il a été pressé, sans aucune chance.J'ai du mal à changer l'image d'un UIBarButtonItem

// bookmarkButton is a property linked up in IB 
-(IBAction)bookmarkButtonTapped:(id)sender 
{ 
NSLog(@"this action triggers"); 
// attempt 1 
UIBarButtonItem* aBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"bookmarkdelete.png"] style:UIBarButtonItemStylePlain target:self action:@selector(bookmarkButtonTapped:)]; 
bookmarkButton = aBarButtonItem; 
[aBarButtonItem release]; 

// attempt 2 
bookmarkButton.image = [UIImage imageNamed:@"bookmarkdelete.png"]; 
} 

Y a-t-il une autre façon de procéder?

Répondre

2

La barre d'outils contient un tableau - éléments - comme une propriété. Ainsi, après la mise en place de la barre d'outils comme une propriété IBOutlet, je devais insérer un nouveau bouton dans ce tableau .. comme ceci:

NSMutableArray *items = [[NSMutableArray alloc] initWithArray:self.toolBar.items]; 
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"newButton.png"] style:UIBarButtonItemStylePlain target:self action:@selector(buttonTapped:)]; 
[items replaceObjectAtIndex:0 withObject:newButton]; 
self.toolBar.items = items; 
[newButton release]; 
[items release]; 
0

Est-ce que bookmarkButton est un UIButton? Devrait-il être référencé via (UIButton *)aBarButtonItem.customView au lieu de directement?

Si c'est un UIButton alors vous aurez envie de mettre l'image en fonction état: - (void)setImage:(UIImage *)image forState:(UIControlState)state

Notez qu'il existe aussi un setBackgroundImage avec la même API si vous voulez que la place.

+0

bookmarkButton est un UIBarButtonItem mis en place dans un PLUME. – cannyboy

-3

essayer [bookmarkButton setImage:[UIImage imageNamed:@"bookmarkdelete.png"] forState:UIControlStateNormal];

+0

Je reçois une erreur 'UIBarButtonItem' ne peut pas répondre à -setImage: forState: 'quand j'essaye cela. – cannyboy

+1

Ce code n'existe pas dans la classe UIBarButtonItem – filou

0

Cela devrait fonctionner

UIImage *normalButtonImage = [UIImage imageNamed:@"TableViewIcon"]; 
UIImage *selectedButtonImage = [UIImage imageNamed:@"CollectionViewIcon"]; 
CGRect rightButtonFrame = CGRectMake(0, 0, normalButtonImage.size.width, 
            normalButtonImage.size.height); 
UIButton *rightButton = [[UIButton alloc] initWithFrame:rightButtonFrame]; 
[rightButton setBackgroundImage:normalButtonImage forState:UIControlStateNormal]; 
[rightButton setBackgroundImage:selectedButtonImage forState:UIControlStateSelected]; 
[rightButton addTarget:self action:@selector(toggleTableView:) 
     forControlEvents:UIControlEventTouchDown]; 
self.toggleMediaView = [[UIBarButtonItem alloc] initWithCustomView:rightButton]; 
[self.navigationItem setLeftBarButtonItem:self.toggleMediaView]; 
self.navigationItem.leftBarButtonItem.enabled = NO;