¿Cómo get la image actual de un button usando imageForState?

Encontré una propiedad llamada imageForState en xcode, pero tengo problemas para hacer lo que quiero. Cuando se presiona un button, quiero ejecutar un bloque de código dependiendo de la image del button.

- (IBAction)favButton:(UIButton *)sender { NSString *currentImage = [sender imageForState:UIControlStateNormal]; if([currentImage isEqualToString:@"already_fav"]) { // execute code } } 

Sin embargo, estoy recibiendo el error:

 Incompatible pointer types initializing NSString _strong with an expression type of UIImage 

¿Alguien puede decirnos cómo solucionar esto?

Estoy seguro de que no puedes comparar una cadena con una image. Sin embargo, hay una solución. Todo lo que tiene que hacer es configurar la label para la image que desea comparar y establecer la label de la image que está comparando.

  image1.tag = 1; image.tag =1; if(image1.tag == image.tag) { // execute code } 

Eso debería ayudar, y espero que así sea.

ASÍ, para este ejercicio, te lo mostraré. Cambie el NSString a un UIImage

  UIImage *currentImage = [sender imageForState:UIControlStateNormal]; currentImage.tag = 1; wantedImage.tag = 1; if(currentImage.tag == wantedImage.tag) { // do something } 

Espero que esto te ayude 🙂

Cuando crea un UIImage es solo una image y no tiene ningún valor de cadena adjunto. El object UIImage no lleva el nombre.

Si fuera yo (y esta no es la única solución, solo otra sugerencia), crearía objects UIImage individuales (dependiendo de cuántos estamos hablando aquí), ya que esto debería ser comprobable mientras que las cadenas no lo son.

Por ejemplo:

 UIImage *image1 = [UIImage imageNamed:@"randomName"]; UIImage *image2 = [UIImage imageNamed:@"anotherRandomName"]; [myButton setImage:image2 forState:UIControlStateNormal]; if ([myButton imageForState:UIControlStateNormal] == image1) { NSLog(@"The button shows image 1 for normal state"); } else if ([myButton imageForState:UIControlStateNormal] == image2) { NSLog(@"The button shows image 2 for normal state"); } else { NSLog(@"Error!!!!!!! :D"); } 

no puedes save la image como una cadena

tratar

UIImage *currentImage = [sender imageForState:UIControlStateNormal];

de lo que puedes comprobar:

if(currentImage == [UIImage imageNamed:@"already_fav"])

Hice esto para cambiar la image de sonido / noSound en el button:

 - (IBAction)soundAction:(id)sender { UIImage *sound = [UIImage imageNamed:@"sound"]; UIImage *noSound = [UIImage imageNamed:@"noSound"]; if ([[sender currentImage] isEqual:sound]) { NSLog(@"IF SOUND IMAGE"); [sender setImage:noSound forState:UIControlStateNormal]; //your code } else if([[sender currentImage] isEqual:noSound]) { NSLog(@"IF NO SOUND IMAGE"); [sender setImage:sound forState:UIControlStateNormal]; //your code } }