web-dev-qa-db-fra.com

UIButton ne sera pas gris

UIButton n'est-il pas censé devenir grisâtre/plus gris lorsqu'il est activé = NON?

J'ai un simple UIButton sur un fond noir (pas d'images personnalisées, rien de personnalisé, faites-le simplement glisser avec IB et changez de taille et de titre).

Et quand je le programme pour devenir handicapé par programme, il reste blanc comme l'enfer!

Pour le moment, j'utilise une petite solution de contournement stupide: hidden blackbg 0,5 alpha UIView en haut du bouton qui devient caché = NO lorsque je dois désactiver le bouton ... mais je voudrais définir le bouton correctement ...

Des pensées?

34
xfze

Il n'y a aucun moyen de faire un UIButton "plus gris". Mais vous pouvez utiliser cette astuce:

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

Donc, votre UIButton semble inutilisable;)

41
Pierre Espenan

Il y a un autre moyen de ne pas avoir à alpha le bouton entier:

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

Ensuite, chaque fois que vous définissez la propriété activée sur NO, le texte du bouton est automatiquement grisé.

49
jowie

Créez simplement une catégorie UIButton comme celle-ci et importez #import "UIButton+StateColors.h" dans les classes où vous souhaitez 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 l'utiliser comme ça ...

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

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

1
Muhammad Ibrahim

Je suis tombé sur cette question et Apple a publié un nouveau UIKit User Interface Catalog pour travailler avec les boutons dans iOS 7.

En réponse à votre question, la classe UIButton Class expose maintenant 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 la propriété ajustsImageWhenDisabled est définie sur "OUI, l'image est plus sombre lorsque le bouton est désactivé. La valeur par défaut est OUI".

1
user2728981

Je suis confronté au même problème car j'avais défini la couleur d'arrière-plan.

J'ai supprimé la couleur d'arrière-plan et l'ai définie pour UIControlStateNormal uniquement et le comportement par défaut d'activation/désactivation a commencé à apparaître.

Si vous définissez une couleur d'arrière-plan au lieu d'une image, essayez cette catégorie pour convertir UIColor en UIImage:

copié de ici

+ (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;
}

puis utilisez ceci:

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

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

0
Abdullah Umer