La image de background de UIButton no cambia

Quiero cambiar la image de background del button según la respuesta del service web. si en respuesta recibo posts no leídos en verdadero, entonces la image será diferente y si no hay posts no leídos, la image será diferente. Recibo la respuesta muy bien, pero no puedo cambiar la image de background de mi button.

Este es el fragment que estoy usando:

if(unread>0){ [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal]; } else{ [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState:UIControlStateNormal]; } 

La solución puede ser muy simple, si la miras. Mantenga un uibutton global y no uno local. Esto ayuda, ya que cuando la request web devuelve una respuesta, el button debe estar presente en el scope y no se puede eliminar de la memory.

Entonces usa ,

 self.myButton = [UIButton buttonWithType:UIButtonTypeCustom]; [self.myButton setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal]; 

O

 [self.myButton setImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal]; 

Y, si marca el clic de un button, siga los pasos :

 -(IBAction)checkForMsgCount: (id)sender { UIButton *buttonObj = (UIButton*)sender; [buttonObj setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal]; } 

Esto cambia la image de background, para el button que responde a la function.

intente con el código a continuación

 if(unread>0){ [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal]; [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState :UIControlStateSelected]; } else{ [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState:UIControlStateNormal]; [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState :UIControlStateSelected]; } 
 [YourBtn setImage:[UIImage imageNamed:@"your.png"] forState:UIControlStateNormal]; 

pruébelo por favor

¿También puedes probar esto para comprobar si realmente tienes estas imágenes en tu package?

  NSString *bundlePath = [[NSBundle mainBundle] bundlePath]; NSString *imagePath = [[NSString alloc] initWithFormat:@"%s/yourButton.png", [bundlePath UTF8String]]; if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath]) { NSLog(@"image exists"); } else{ NSlog(@"image Does Not Exist"); } 
 [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal|UIControlStateSelected]; 

¿Está agregando la image de button para UIControlStateNormal o UIControlStateSelected

tratar

 [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal]; 

encuentre si la image existe y se agrega correctamente al package y el nombre es correcto

Establezca imágenes de background para UIControlStateNormal y UIControlStateSelected como líneas separadas .

 if(unread>0){ [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] UIControlStateNormal]; [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] UIControlStateSelected]; } else { [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] UIControlStateNormal]; [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] UIControlStateSelected]; } 

Primero verifica la connection IBOutlet de tu button 🙂

Y establezca su código después de get los datos del service web, es decir, después de get el valor de unread

 if(unread>0){ [badgeTitle setBackgroundImage:[UIImage imageNamed:@"unread.png"] forState:UIControlStateNormal]; } else{ [badgeTitle setBackgroundImage:[UIImage imageNamed:@"read.png"] forState:UIControlStateNormal]; } 
 UIButton *btn = [[UIButton alloc]init]; btn.frame = CGRectMake(50, 50, 100, 50); [btn setTitle:@"ok" forState:UIControlStateNormal]; [btn setBackgroundImage:[UIImage imageNamed:@"icon.png"] forState:UIControlStateNormal]; btn.backgroundColor=[UIColor blueColor]; 

Espero que esto funcione para ti …

después de configurar la image de background

 [badgeTitle setNeedsLayout];