1

アプリに応じて4つの異なる状態を持つ UIButton があります。

state-1 normal.
state-2 selected.
state-3 highlighted , going normal-to-selected.
state-4 highlighted , going selected-to-normal.

最初はボタンは通常の状態で、押すと選択された状態になり、これらの状態を切り替え続けます。

これは、2 つの状態のイメージを指定し、選択したプロパティを変更することによって実現されます。

ただし、すべての状態の変更時に、強調表示された状態の画像を変更して、押されている間に状態 3 と状態 4 のいずれかを表すようにする必要がありました。

問題は、選択された状態から通常の状態に移行するときに、UIButton の強調表示された状態がないように見えることです。

したがって、今のところ、ビューで選択状態を確認するために BOOL ivar を保持しています。ボタンを通常の状態に保ち、BOOL ivar の値に基づいてすべてのアクションで強調表示された状態と通常の状態のイメージを変更します。

これを達成する簡単な方法はありますか?

4

2 に答える 2

8

これは、状態が 2 つの値の混合であるためです。

最も一般的なもののいくつか

UIControlStateNormal,
UIControlStateHighlighted,
UIControlStateDisabled,
UIControlStateSelected,
UIControlStateSelected | UIControlStateHighlighted,
UIControlStateSelected | UIControlStateDisabled,

highlightedそのため、いつ状態にしたい場合は、selectedこのようにすることを好みます。

    [button setImage:imageHighlighted forState:UIControlStateSelected | UIControlStateHighlighted];

一般的なルールが、選択されたときに常に同じ強調表示された状態になるということである場合、次の行に沿って何かを行うことができます

    UIControlState mixedState = UIControlStateSelected | UIControlStateHighlighted;
    [button setImage:[button imageForState:state] forState:state];
    [button setBackgroundImage:[button backgroundImageForState:state] forState:state];
    [button setTitleColor:[button titleColorForState:state] forState:state];

等々

于 2013-04-08T12:21:39.227 に答える
0

強調表示された状態をブール変数に保存することは、状態を追跡するための一般的な方法ですが、コードを簡単にする方法を次に示します。

setHighlightedオーバーライドできる UIControl で呼び出されるメソッドがあります。複数のアクションではなく、そこに変数を設定できます。

-(void)setHighligted:(BOOL) highlighted {
    self.mySavedHighlightedState = highlighted;
}

mySavedHighlightedStateこれを実装するプロパティを持つカスタム UIButton クラスを作成します。

于 2013-04-08T12:10:13.660 に答える