当从选定状态进入正常状态时,UIButton的突出显示状态不会出现

Amo*_*kar 1 objective-c ios

我有一个UIButton,根据我的应用程序有4种不同的状态.

state-1 normal.
state-2 selected.
state-3 highlighted , going normal-to-selected.
state-4 highlighted , going selected-to-normal.
Run Code Online (Sandbox Code Playgroud)

最初按钮处于正常状态,当我按下它时,它进入选定状态并在这些状态之间保持切换.

这是通过为两个状态指定图像并更改所选属性来实现的.

但是,在更改每个状态时,我需要更改突出显示的状态图像,以确保它在按下时表示状态3和状态4.

问题是,当从选择到正常时,看起来UIButton没有突出显示的状态.

所以现在我保留一个BOOL ivar来查看我视图中的选择状态.并保持按钮处于正常状态,并根据BOOL ivar的值,使用每个动作将其图像更改为突出显示的状态和正常状态.

有没有更简单的方法来实现这一目标?

hfo*_*sli 8

这样做的原因是状态是两个值的混合.

一些最公共的

UIControlStateNormal,
UIControlStateHighlighted,
UIControlStateDisabled,
UIControlStateSelected,
UIControlStateSelected | UIControlStateHighlighted,
UIControlStateSelected | UIControlStateDisabled,
Run Code Online (Sandbox Code Playgroud)

因此,如果你想拥有一个highlighted州,selected那么我更喜欢这样做.

    [button setImage:imageHighlighted forState:UIControlStateSelected | UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)

如果一般规则是您在选择时始终具有相同的突出显示状态,则可以执行某些操作

    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];
Run Code Online (Sandbox Code Playgroud)

等等