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

时间:2013-04-08 12:03:07

标签: ios objective-c

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

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

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:8)

原因是状态是两个值的混合。

一些最常见的人

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

等等

答案 1 :(得分:0)

将突出显示的状态保存在布尔变量中是跟踪状态的常用方法,但这里只是您的代码。

可以覆盖的UIControl上调用setHighlighted方法。您可以在那里设置变量而不是多个操作:

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

创建一个具有mySavedHighlightedState属性的自定义UIButton类来实现此目的。