2017-02-04 1 views
2

Un NSButton normal semble transparent s'il est désactivé.Éviter de rendre un NSButton transparent/transparent lorsque isEnabled est false (désactivé)

enter image description here

L'image montre un bouton avec style 'push'

Cependant, je veux désactiver le bouton sans la transparence.

J'ai essayé de mettre le programme alphaValue-1.0 mais il semble que les NSButtons cell (ControlView), ainsi que tous les autres sous-vues sont déjà à un AlphaValue de 1,0.

En outre, il n'y a rien comme userInteractionEnabled ou adjustsImageWhenDisabled (les deux here recommandés) je pourrais utiliser comme dans iOS. Comment puis-je désactiver un NSButton sans la transparence standard?

EDIT: Aussi un « push texturé » bouton semble être transparent: enter image description here

+0

Faut-il utiliser un bouton-poussoir ordinaire? Un bouton arrondi texturé n'a pas ce problème. – rocky

+0

@rocky Voir ma question mise à jour ci-dessus: Il semble que le bouton 'textured push' ait un peu moins de transparence, mais il est également transparent. – ixany

+0

Ahh vous avez raison. Je suppose que je ne regardais pas assez dur. Désolé pour ça. – rocky

Répondre

0

Si vous n'avez pas besoin du titre, et fournira votre propre image de bouton, vous pouvez utiliser setImageDimsWhenDisabled à désactiver la transparence dans l'image de NSButtonCell lorsqu'elle est désactivée. Voici le code:

[buttonCell setImageDimsWhenDisabled:NO]; 

NSButtonCell est la sous-vue NSButton. Mais comme je l'ai dit, le titre sera encore un peu "obscurci", ainsi que son arrière-plan. Mais depuis l'image si sur le fond, vous ne verrez pas l'arrière-plan transparent.

Une autre façon (évitez la sous-classe NSButton) est d'avoir votre propre variable de suivi d'état pour le bouton. Lorsque l'état est désactivé, supprimez tout événement de clic. Exemple de cadre de code est comme ceci:

- (IBAction)clickOnButton { 
    static BOOL isEnabled = YES; 
    if (isEnabled) { 
     // Handle click event here... 

    } 
    isEnabled = !isEnabled; 
} 

Cela peut montrer le point culminant lorsque l'on clique dessus. Vous pouvez désactiver la surbrillance aussi. Mais ce n'est pas une bonne idée si vous avez beaucoup de boutons. Si vous avez beaucoup de boutons, la sous-classe NSButton est le meilleur choix.