1

UIButton には、通常/デフォルト、強調表示、および選択されたイメージがあります。次に、IBActionon と呼ばれるメソッドがありTouch Downます。このメソッドは、選択されているかどうかに応じて、強調表示された画像を変更します。ただし、ボタンが選択されると、メソッドが呼び出されるため、ハイライト画像が変更されますが、表示されるのは、色合いのある通常/デフォルトの画像です。使用されている画像が ではないことをテストしましたnil。選択された状態の UIButton が押されると、通常の状態が濃淡で表示されます。ハイライト画像を使用しないのはなぜですか?選択したハイライト画像を表示する別の方法はありますか?

4

2 に答える 2

2

IBAction メソッドでハイライト状態を設定するのはなぜですか? ボタンを作成するときに、強調表示された画像をボタンに設定するだけです。自動で切り替わります。強調表示された画像が割り当てられていない場合、選択時に色合いを追加するのが「選択」のデフォルトの動作です。

Interface Builder を使用している場合は、強調表示された画像をそこに割り当てます。

IBAction メソッドをtouchUpInsideイベントに設定して、通常のボタン選択動作を探していると想定しています。

于 2012-08-21T17:13:05.407 に答える
1

選択した状態と通知を (UI 経由ではなく) 使用して、この問題を回避しました。通知が呼び出されると、デフォルト状態のイメージを変更し、選択状態を変更してから、選択状態のイメージを変更します。

更新:私と似たようなことをしていた別の質問から、はるかに良いアイデアを思いつきました。それを行う方法は、setSelected

- (void)setSelected:(BOOL)selected
{
    if ( selected )
    {
        [self setImage:[CFCHStyleSheet imageForTickButtonChecked] forState:UIControlStateNormal];
        [self setImage:[CFCHStyleSheet imageForTickButtonChecked] forState:UIControlStateSelected];
        [self setImage:[CFCHStyleSheet imageForTickButtonCheckedDisabled] forState:UIControlStateDisabled];
    }
    else
    {
        [self setImage:[CFCHStyleSheet imageForTickButtonUnchecked] forState:UIControlStateNormal];
        [self setImage:[CFCHStyleSheet imageForTickButtonUnchecked] forState:UIControlStateSelected];
        [self setImage:[CFCHStyleSheet imageForTickButtonUncheckedDisabled] forState:UIControlStateDisabled];
    }

    [super setSelected:selected];
}
于 2012-10-01T15:16:55.320 に答える