UIButton désactivé non faded ou gris

Dans mon application iPhone, j’ai un UIButton que j’ai créé dans Interface Builder. Je peux l’activer et le désactiver avec succès dans mon code …

sendButton.enabled = YES; 

ou

 sendButton.enabled = NO; 

Cependant, l’aspect visuel du bouton est toujours le même! Ce n’est pas fané ou gris. Si je tente de cliquer dessus, il est activé ou désactivé comme prévu. Est-ce que je manque quelque chose? Ne devrait-il pas sembler fané ou gris?

Merci

Vous pouvez utiliser le code suivant:

 sendButton.enabled = YES; sendButton.alpha = 1.0; or sendButton.enabled = NO; sendButton.alpha = 0.5; 

changez simplement la configuration d’état pour désactiver et choisir ce que vous voulez, image d’arrière-plan pour l’état désactivé

entrer la description de l'image ici

Une autre option consiste à modifier la couleur du texte (en gris clair par exemple) pour l’état désactivé. Dans l’éditeur de storyboard, sélectionnez Disabled dans le bouton contextuel State Config et utilisez le bouton contextuel Color Text pour modifier la couleur du texte. Dans le code, utilisez le message -setTitleColor: forState:.

(Je me rends compte que c’est un ancien message, mais je pensais que les autres pourraient aimer cette option)

Essayez de définir les différentes images pour UIControlStateDisabled (image grise désactivée) et UIControlStateNormal (image normale) afin que le bouton génère l’état désactivé pour vous.

Si vous utilisez un bouton de texte, vous pouvez mettre dans la méthode d’instance viewDidLoad

 - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state 

Exemple:

 [self.syncImagesButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled]; 

Vous pouvez utiliser adjustsImageWhenDisabled qui est la propriété de UIButton
(@property (nonatomic) BOOL adjustsImageWhenDisabled)

Ex:

  Button.adjustsImageWhenDisabled = false 

C’est une question assez ancienne, mais il existe un moyen très simple d’y parvenir.

myButton.userInteractionEnabled = false

Cela ne fera que désactiver les gestes tactiles sans modifier l’apparence du bouton.

En Swift :

 previousCustomButton.enabled = false previousCustomButton.alpha = 0.5 

ou

 nextCustomButton.enabled = true nextCustomButton.alpha = 1.0 

Vous pouvez utiliser les deux premières réponses et vous obtiendrez un meilleur résultat.

Dans l’inspecteur d’atsortingbuts (lorsque vous sélectionnez le bouton), définissez la configuration d’état sur Désactivé pour définir la nouvelle image à afficher lorsqu’elle est désactivée (supprimez le marqueur dans le contrôle Contenu-> Activé pour le désactiver). .

Et lorsque vous changez l’état sur activé, l’image charge celle de cet état.

L’ajout de la logique alpha à cela est un bon détail.

Salutations!

Je suis coincé sur le même problème. La définition de l’alpha n’est pas ce que je veux.

UIButton a ” image de fond ” et ” couleur de fond “. Pour l’image, UIButton a une propriété comme

@property (nonatomic) BOOL adjustsImageWhenDisabled

Et l’image d’arrière-plan est dessinée plus claire lorsque le bouton est désactivé. Pour la couleur d’arrière-plan, le réglage alpha, la solution de Ravin, fonctionne correctement.

Tout d’abord, vous devez vérifier si vous avez décoché la case “Ajuste l’image” sous Utilities-Atsortingbutes.
Ensuite, vérifiez la couleur de fond de ce bouton.

(J’espère que c’est utile. C’est un ancien message; les choses ont peut-être changé dans Xcode).

Créez une extension dans Swift> 3.0 plutôt que chaque bouton seul

 extension UIButton { override open var isEnabled : Bool { willSet{ if newValue == false { self.setTitleColor(UIColor.gray, for: UIControlState.disabled) } } } 

Pour rendre le bouton estompé lorsqu’il est désactivé, vous pouvez définir l’alpha pour cela. Il y a deux options pour vous:

Première manière : Si vous souhaitez appliquer tous vos boutons dans votre application, vous pouvez écrire une extension pour UIButton comme ceci:

 extension UIButton { open override var isEnabled: Bool{ didSet { alpha = isEnabled ? 1.0 : 0.5 } } } 

Deuxième méthode : si vous souhaitez simplement appliquer certains boutons de votre application, vous pouvez écrire une classe personnalisée à partir de UIButton comme ci-dessous et utiliser cette classe pour laquelle vous souhaitez appliquer:

 class MyButton: UIButton { override var isEnabled: Bool { didSet { alpha = isEnabled ? 1.0 : 0.5 } } } 

Si UIButton est dans l’état combiné avec selected et disabled , son état est UIControlStateSelected | UIControlStateDisabled UIControlStateSelected | UIControlStateDisabled .

Donc, son état doit être ajusté par

 [button setTitleColor:color UIControlStateSelected | UIControlStateDisabled]; [button setImage:image forState:UIControlStateSelected | UIControlStateDisabled]; 

Une approche est la sous-classe UIButton comme suit.

 @implementation TTButton - (void)awaeFromNib { [super awakeFromNib]; //! Fix behavior when `disabled && selected` //! Load settings in `xib` or `storyboard`, and apply it again. UIColor *color = [self titleColorForState:UIControlStateDisabled]; [self setTitleColor:color forState:UIControlStateDisabled]; UIImage *img = [self imageForState:UIControlStateDisabled]; [self setImage:img forState:UIControlStateDisabled]; } - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state { [super setTitleColor:color forState:state]; // if (UIControlStateDisabled == state) { [super setTitleColor:color forState:UIControlStateSelected | state]; [super setTitleColor:color forState:UIControlStateHighlighted | state]; } } - (void)setImage:(UIImage *)image forState:(UIControlState)state { [super setImage:image forState:state]; if (UIControlStateDisabled == state) { [super setImage:image forState:UIControlStateSelected | state]; [super setImage:image forState:UIControlStateHighlighted | state]; } } @end 

Cette question a beaucoup de réponses mais tout cela ne semble pas très utile si vous voulez vraiment utiliser backgroundColor pour styliser vos boutons. UIButton a une bonne option pour définir différentes images pour différents états de contrôle, mais il n’y a pas la même fonctionnalité pour les couleurs d’arrière-plan. Une des solutions consiste donc à append une extension qui générera des images à partir de la couleur et les appliquera au bouton.

 extension UIButton { private func image(withColor color: UIColor) -> UIImage? { let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0) UIGraphicsBeginImageContext(rect.size) let context = UIGraphicsGetCurrentContext() context?.setFillColor(color.cgColor) context?.fill(rect) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image } func setBackgroundColor(_ color: UIColor, for state: UIControlState) { self.setBackgroundImage(image(withColor: color), for: state) } } 

Un seul problème avec cette solution – cette modification ne sera pas appliquée aux boutons créés dans le storyboard. En ce qui me concerne, ce n’est pas un problème car je préfère styliser l’interface utilisateur à partir du code. Si vous souhaitez utiliser des story-boards, vous aurez besoin de magie supplémentaire avec @IBInspectable .

La deuxième option est le sous-classement mais je préfère éviter cela.

Définir la title color pour différents états:

 @IBOutlet weak var loginButton: UIButton! { didSet { loginButton.setTitleColor(UIColor.init(white: 1, alpha: 0.3), for: .disabled) loginButton.setTitleColor(UIColor.init(white: 1, alpha: 1), for: .normal) } } 

Utilisation: (la couleur du texte sera modifiée automatiquement)

 loginButton.isEnabled = false 

entrer la description de l'image ici

 #import "UIButton+My.h" #import  @implementation UIButton (My) -(void)fade :(BOOL)enable{ self.enabled=enable;// self.alpha=enable?1.0:0.5; } @end 

.h:

 #import  @interface UIButton (My) -(void)fade :(BOOL)enable; @end