2013-06-03 23 views
8

voglio che il mio UIButton di presentarsi allo stato evidenziato quando si fa clic su un pulsante che è già selezionata.UIButton evidenziato Stato non mostrare quando si fa clic su un UIButton selezionato

In sostanza nello stato evidenziato che applicare un'immagine * .png come il mio UIButton BackgroundImage per dare un effetto premuto.

Ma se il pulsante è già nello stato selezionato quando clicco su di esso ancora una volta non riesco proprio a vedere lo stato evidenziato, ma va dritto allo stato normale!

Guarda il Problema ->Video of the Issue!

Aiuto per favore

//0 init UIButton 
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x, y, aSide, aSide)]; 

//1 Give it a backgroundColor 
[button setBackgroundColor:aColor]; 

[..] 

//2 Set titleLabel and its style 
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; 
[button setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted]; 

UIImage *shadowImage = [UIImage imageNamed:kBtnShadow]; 
shadowImage = [shadowImage stretchableImageWithLeftCapWidth:floorf(shadowImage.size.width/2) topCapHeight:floorf(shadowImage.size.height/2)]; 

[button setBackgroundImage:shadowImage forState: UIControlStateHighlighted]; 

[button setTitle:aLabel forState: UIControlStateNormal]; 

//3 Assign tag and Action 
[button setTag:tag]; 
[button addTarget:target action:a forControlEvents:UIControlEventTouchUpInside]; 

risposta

18

I vari stati: UIControlStateNormal, UIControlStateSelected e (UIControlStateSelected | UIControlStateHighlighted) sono tutti realmente distinti. Se volete che il vostro shadowImage per applicare sia nel (solo) evidenziato stato e nella condizione + selezionato evidenziato, è inoltre necessario impostare:

[button setBackgroundImage:shadowImage forState:(UIControlStateHighlighted | UIControlStateSelected)] 
+0

Grazie Dio! haha ^^ Stavo impazzendo. E grazie ovviamente ... ho anche provato che la linea di codice, ma mi è stato di rimuovere la linea per lo stato evidenziato come pensavo fosse ridondante:/ – luca

+0

Sembra che, anche se l'immagine di sfondo impostato per lo stato selezionato ed evidenziato in IB, si ottiene sistema evidenziata immagine (grigio scuro) quando adjustsImageWhenHighlighted è sI (di default è YES) o image.So normale è richiesto di codice di risposta di Aaron oro. – tounaobun

5

In swift questo sarebbe:

button.setBackgroundImage(shadowImage, forState: UIControlState.Selected.union(UIControlState.Highlighted)) 
1

In Swift v3 (Nov. 2016):

button.setBackgroundImage(shadowImage, for: UIControlState.selected.union(UIControlState.highlighted))