8

既に選択されているボタンをクリックすると、UIButton が強調表示された状態で表示されるようにします。

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

しかし、ボタンが既に選択された状態にある場合、もう一度クリックすると、強調表示された状態が表示されませんが、通常の状態になります!

問題を見る-->問題 のビデオ!

助けてください

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

4 に答える 4

19

UIControlStateNormalUIControlStateSelected、 、およびのさまざまな状態(UIControlStateSelected | UIControlStateHighlighted)は、実際にはすべて異なります。shadowImage(のみ) 強調表示された状態と強調表示された + 選択された状態の両方に適用する場合は、次の設定も行う必要があります。

[button setBackgroundImage:shadowImage forState:(UIControlStateHighlighted | UIControlStateSelected)]
于 2013-06-04T00:52:16.143 に答える
1

Swift v3 (2016 年 11 月):

button.setBackgroundImage(shadowImage, for: UIControlState.selected.union(UIControlState.highlighted))
于 2016-11-16T13:10:10.690 に答える