2013-06-03 34 views
8

Chcę, aby mój Uibutton wyświetlał podświetlony stan po kliknięciu przycisku, który jest już wybrany.Podświetlony stan Uibutton nie jest wyświetlany po kliknięciu wybranego odbiornika

Zasadniczo w podświetlonym stanie nanosimy obraz * .png jako moje tło UIButton, aby nadać efekt wciśnięty.

Ale jeśli przycisk jest już w wybranym stanie, gdy kliknę ponownie, po prostu nie widzę podświetlonego stanu, ale przechodzi on prosto do normalnego stanu!

Oglądaj Problem ->Video of the Issue!

Pomóżcie proszę

//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]; 

Odpowiedz

18

Poszczególne stany: UIControlStateNormal, UIControlStateSelected i (UIControlStateSelected | UIControlStateHighlighted) są rzeczywiście różne. Jeśli chcesz, aby shadowImage do zastosowania zarówno w (tylko) wyróżnionego stanu i podświetlonego + wybranego stanu, należy również ustawić:

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

Niż Bóg! haha^^ Szaleję. I oczywiście dziękuję ... Próbowałem również tej linii kodu, ale usunąłem linię dla podświetlonego stanu, ponieważ uważałem, że jest zbędny:/ – luca

+0

Wygląda na to, że nawet jeśli ustawisz obraz tła dla stanu wybranego i podświetlonego w IB, pojawi się podświetlony obraz systemu (ciemnoszary), gdy adjustsImageWhenHighlighted ma wartość YES (wartość domyślna to TAK) lub normalny obraz. W związku z tym konieczne jest zakodowanie odpowiedzi Aarona Złotego. – tounaobun

5

W swift byłoby to:

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

w Swift v3 (listopad 2016):

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