2011-11-03 6 views
6

Sto Personalizzazione del UIButton di programmazione qui:Qual è il diritto UIControlState per l'UIButton premuto?

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [button setSelected:YES]; 
     button.frame = CGRectMake(x, y, width, height); 
     [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
     [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected]; 
     [button setTitle:@"Button Title" forState:UIControlStateNormal]; 
     [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 
     [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateSelected]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted]; 
     [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateDisabled]; 

il problema è se sto tenendo premuto l'immagine di sfondo scompare fino a quando sto rilasciando ...

risposta

8

Penso che tu sia in modalità overkill :). Prova settando button.png per UIControlStateNormal e buttonActive.png per UIControlStateHighlighted. Non c'è bisogno per il resto. Vedi se questo funziona.

EDIT:

Inoltre, ricorda: i nomi dei file Immagine sono case sensitive

Stai testando sul dispositivo? I nomi delle immagini sono case sensitive per le build del dispositivo, ma non per il simulatore. Ad esempio, se il tuo file immagine reale è denominato buttonactive.png, ma lo chiami come buttonActive.png dal tuo codice, verrà visualizzato sul simulatore, ma non sul dispositivo.

Assicurarsi che il caso per entrambi i nomi immagine corrisponda al nome del file effettivo.

EDIT # 2:

provare questo codice

button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setSelected:YES]; 
    button.frame = CGRectMake(x, y, width, height); 
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
    [button setTitleColor:[UIColor blueColor] forState:UIControlStateSelected]; 
    [button setTitle:@"Button Title" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside]; 
    [button setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal]; 
    [button setBackgroundImage:[UIImage imageNamed:@"buttonActive.png"] forState:UIControlStateHighlighted]; 
+1

Potrei aggiungere che i nomi dei file immagine sono case sensitive su un Dispositivo, ma NON nel simulatore. Questo mi ha fatto grattarmi la testa un paio di volte :) – Keller

+0

@Sid: so che i ** nomi delle immagini sono case sensitive **. Sto testando il simulatore dell'iPhone ma dovrei reagire allo stesso modo ... –

+0

@Keller: :) ... – Sid

3

capirlo, funziona in questo modo:

[_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:UIControlStateSelected]; 
[_whateverButtonTab setBackgroundImage:[UIImage imageNamed:@"ActivateButton.png"] forState:(UIControlStateHighlighted|UIControlStateSelected)]; 
-2

Mentre noi aggiungiamo un pulsante da IDE

sample:

.h file 
-(IBAction)BtnAdd:(id)sender 

in .m lima è

-(IBAction)BtnAdd:(id)sender 
{ 
} 

è un metodo che non può abilitare o disabilitare.

quindi se si desidera abilitare o disabilitare il pulsante renderlo il più -(IBOutlet)BtnAdd aggiungere IBOutlet-.h di file e collegarlo al pulsante particolare poi BtnAdd.enabled=NO funzionerà