2013-06-03 17 views
8

すでに選択されているボタンをクリックすると、UIButtonが強調表示されます。UIButton選択したUIButtonをクリックしたときにハイライト状態が表示されない

基本的に強調表示された状態では、* .png画像をUIButtonのbackgroundImageとして適用して、押し下げた効果を与えます。

ボタンがすでに選択された状態の場合もう一度クリックすると、強調表示された状態は表示されませんが、通常の状態にまっすぐに進みます。

ウォッチ特集 - >Video of the Issue!

ヘルプしてください

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

答えて

18

各種の状態:UIControlStateNormalUIControlStateSelected、および(UIControlStateSelected | UIControlStateHighlighted)は、すべて実際に異なっています。あなたはshadowImageは(のみ)ハイライトされた状態にして強調表示+選択された状態の両方で適用したい場合は、あなたも設定する必要があります。swift

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

Thanx God!私は狂っていた。もちろん、ありがとうございます...私もその行を試しましたが、私は冗長だと思ったのでハイライトされた状態の行を削除していました:/ – luca

+0

IBで強調表示された状態の背景イメージを設定しても、 adjustsImageWhenHighlightedがYES(デフォルトはYES)または通常の画像の場合、システムの強調表示された画像(濃い灰色)が表示されます.Aaron Goldenの答えを記述する必要があります。 – tounaobun

5

が、これは次のようになります。

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

スウィフトでv3(2016年11月):

button.setBackgroundImage(shadowImage, for: UIControlState.selected.union(UIControlState.highlighted)) 
関連する問題