2010-11-22 18 views
6

Estoy intentando varias formas de cambiar la imagen de un UIBarButtonItem una vez que ha sido presionada, sin suerte.Tener problemas para cambiar la imagen de 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"]; 
} 

¿Hay alguna otra forma de hacerlo?

Respuesta

2

La barra de herramientas contiene una matriz - artículos - como una propiedad. Así que después de instalar la barra de herramientas como una propiedad IBOutlet, tuve que insertar un nuevo botón en esa matriz .. así:

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

¿Es bookmarkButton a UIButton? ¿Se debe hacer referencia a través del (UIButton *)aBarButtonItem.customView en lugar de hacerlo directamente?

Si se trata de un UIButton entonces usted querrá ajustar la imagen en función de estado: - (void)setImage:(UIImage *)image forState:(UIControlState)state

Tenga en cuenta que también hay una setBackgroundImage con la misma API si desea que en su lugar.

+0

bookmarkButton es un UIBarButtonItem estableció en una PUNTA. – cannyboy

-3

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

+0

Aparece un error 'UIBarButtonItem' puede no responder a -setImage: forState: 'cuando intento eso. – cannyboy

+1

Este código no existe en la clase UIBarButtonItem – filou

0

Esto debería funcionar

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; 
Cuestiones relacionadas