28 votes

Le bouton UIB ne s'efface pas

L'UIButton n'est-il pas censé devenir grisâtre/grisâtre lorsque activé=NO ?

J'ai un simple UIButton sur un fond noir (pas d'images personnalisées, rien de personnalisé, je l'ai juste fait glisser avec IB et j'ai changé la taille et le titre).

Et lorsque je le configure par programme pour qu'il devienne désactivé, il reste blanc comme l'enfer !

Pour l'instant, j'utilise un petit contournement stupide : hidden blackbg 0,5 alpha UIView au dessus du bouton qui devient hidden=NO quand j'ai besoin de désactiver le bouton... mais j'aimerais régler le bouton correctement...

Des idées ?

43voto

jowie Points 3733

Il y a un autre moyen sans avoir à alpha le bouton entier :

[startButton setTitleColor:[UIColor grayColor] forState:UIControlStateDisabled];

Ensuite, si vous attribuez la valeur NO à la propriété enabled, le texte du bouton s'estompera automatiquement.

32voto

Pierre Espenan Points 1680

Il n'existe aucun moyen de rendre un bouton UIB plus "gris". Mais vous pouvez utiliser cette astuce :

UIButton *myButton;
myButton.alpha = 0.4;
myButton.enabled = NO;

Ainsi, votre UIButton semble inutilisable ;)

1voto

Muhammad Ibrahim Points 1833

Il suffit de créer une catégorie UIButton comme la suivante et d'importer #import "UIButton+StateColors.h" dans les classes où vous voulez l'utiliser.

.h

#import <UIKit/UIKit.h>

@interface UIButton (StateColors)

-(void)makeDisabled:(BOOL)flag;

@end

.m

#import "UIButton+StateColors.h"

#define ENABLED_BUTTON_ALPHA 1
#define DISABLED_BUTTON_ALPHA 0.3

@implementation UIButton (StateColors)

-(void)makeDisabled:(BOOL)flag {
    self.enabled = !flag;
    self.alpha = flag ? DISABLED_BUTTON_ALPHA : ENABLED_BUTTON_ALPHA;
}

@end

Et utilisez-le comme ça...

[self.emailBtn makeDisabled:NO];
[self.printBtn makeDisabled:YES];

C'est une solution universelle j'espère...

0voto

user2728981 Points 33

Je suis tombé sur cette question et Apple a publié une nouvelle Catalogue d'interface utilisateur UIKit pour travailler avec les boutons dans iOS 7.

En réponse à votre question, le Classe UIButton expose désormais une propriété appelée adjustsImageWhenDisabled, qui est "une valeur booléenne qui détermine si l'image change lorsque le bouton est désactivé".

Si cette propriété ajusteImageWhenDisabled est définie sur "YES, l'image est dessinée plus sombre lorsque le bouton est désactivé. La valeur par défaut est YES."

0voto

Abdullah Umer Points 760

Je suis confronté au même problème car j'avais défini une couleur de fond.

J'ai enlevé la couleur de fond et l'ai mise pour UIControlStateNormal seulement et le comportement par défaut pour l'activation/désactivation a commencé à apparaître.

Si vous définissez une couleur de fond au lieu d'une image, essayez cette catégorie pour convertir UIColor en UIImage :

copié à partir de aquí :

+ (UIImage *)imageWithColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

alors utilisez ceci :

[self.loginButton setBackgroundImage:[UIImage imageWithColor:greenColor] forState:UIControlStateNormal];
self.loginButton.enabled = NO;

pour définir la couleur comme arrière-plan. Maintenant, lorsque vous activez/désactivez, l'effet gris devrait apparaître.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X