Bug ?
Non, ce n'est pas un bogue, l'UIButton est conçu de cette manière, et voici pourquoi : lorsque vous définissez une image pour le bouton UIButton
's UIControlStateNormal
(état normal), il la conservera dans les autres états (sélectionné, désactivé, en surbrillance) au cas où vous n'auriez pas spécifié d'image pour ces autres états.
Cela signifie que vous pouvez configurer votre bouton avec une seule image, le système ajoute une surbrillance sombre dans l'état de surbrillance et donne au bouton l'apparence d'un alpha 0,5 dans l'état de désactivation.
On peut penser que le fait de fixer l'image à nil
pour l'état sélectionné s'en débarrassera pour cet état, mais bien sûr quand l'état changera, il verra qu'il n'a pas d'image pour cet état (c'est nil
!), mais il le fait pour l'État UIControlStateNormal
Il utilisera donc cette dernière à la place, et vous vous retrouverez avec la même image !
Notez que si vous avez défini l'image pour un état différent de l'état normal, elle n'aurait été affichée que pour cet état.
Solution de contournement
Honnêtement, vos intentions concernant l'image et le titre du bouton semblent un peu bizarres... Peut-être que vous êtes nouveau sur iOS, peut-être qu'avec plus d'informations sur ce que votre bouton fait et est supposé faire, nous pourrions suggérer une meilleure solution.... mais la façon la plus simple de contourner ce problème avec les informations que vous nous avez données est de donner une image valide pour l'état sélectionné, une image qui est de préférence transparente, et qui pourrait être de 1x1 pixel pour économiser de l'espace.
Sinon, vous pouvez faire ceci, créer un UIImage
au moment de l'exécution pour l'utiliser en tant que placeholder faisant office d'image, mais serait une bonne idée de le mettre en cache, peut-être de le créer une fois et de le conserver dans un iVar .
// Create a 1x1 UIImage at runtime
UIGraphicsBeginImageContext((CGSize){1.0f,1.0f});
UIImage *runtimeImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// Setup your button
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(20.0, 20.0, 100.0, 100.0);
// set the image for each state
[btn setImage:[UIImage imageNamed:@"Back.png"] forState:UIControlStateNormal];
[btn setImage:runtimeImage forState:UIControlStateSelected];
// have your text for the normal state
[btn setTitle:@"selected !" forState:UIControlStateNormal];