iphone ios - UIButton non si oscurerĂ 




xcode label (5)

L'UIButton non dovrebbe diventare grigiastro / grigio quando è abilitato = NO?

Ho un semplice UIButton su un blackbackground (nessuna immagine personalizzata, niente personalizzato, semplicemente trascinato con IB e cambiato dimensione e titolo).

E quando lo imposto programmaticamente per diventare disabilitato rimane bianco come l'inferno!

Per ora sto usando una piccola stupida soluzione: hidden blackbg 0,5 alfa UIView in cima al pulsante che diventa nascosto = NO quando ho bisogno di disabilitare il pulsante ... ma vorrei impostare il pulsante correttamente ...

qualche idea?


Answers

Mi sono imbattuto in questa domanda e Apple ha pubblicato un nuovo Catalogo dell'interfaccia utente UIKit per lavorare con i pulsanti in iOS 7.

In risposta alla tua domanda, la classe UIButton espone ora una proprietà chiamata adjustsImageWhenDisabled, che è "un valore booleano che determina se l'immagine cambia quando il pulsante è disabilitato."

Se regola la proprietà ImageWhenDisabled su "YES, l'immagine viene scurita quando il pulsante è disabilitato." Il valore predefinito è SÌ. "


È sufficiente creare una categoria UIButton come segue e importare #import "UIButton+StateColors.h" nelle classi in cui si desidera utilizzarlo.

.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

E usalo così ...

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

È una soluzione universale, spero ...


Affronto lo stesso problema perché avevo impostato il colore di sfondo.

Ho rimosso il colore di sfondo e l'ho impostato solo per UIControlStateNormal e UIControlStateNormal iniziato a comparire il comportamento predefinito per l'abilitazione / disabilitazione.

Se stai impostando il colore di sfondo invece dell'immagine prova questa categoria per convertire UIColor in UIImage:

copiato da here :

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

quindi usa questo:

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

per impostare il colore come sfondo. Ora quando si abilita / disabilita, dovrebbe apparire l'effetto grigio.


C'è un altro modo senza dover alfa l'intero pulsante:

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

Quindi, ogni volta che si imposta la proprietà abilitata su NO, il testo del pulsante si oscurerà automaticamente.


Ci sono alcuni metodi su NSObject che ti permettono di controllare le classi.

Innanzitutto c'è -class che restituirà la classe del tuo oggetto. Ciò restituirà AViewController o BViewController.

Quindi ci sono due metodi, -isKindofClass: ed isMemberOfClass:

-isKindOfClass: confronta il ricevente con la classe passata come argomento e restituisce true o false in base al fatto che la classe sia o meno dello stesso tipo o di una sottoclasse della classe data.

-isMemberOfClass: confronta il ricevente con la classe passata come argomento e restituisce true o false in base al fatto che la classe sia o meno la stessa classe della classe data.





iphone ios uibutton