1

我有一个 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 的值通过每个操作将其图像更改为突出显示状态和正常状态。

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

4

2 回答 2

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

等等

于 2013-04-08T12:21:39.227 回答
0

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

有一种setHighlighted方法可以在 UIControl 上调用,您可以覆盖该方法。您可以在其中设置变量,而不是在多个操作中:

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

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

于 2013-04-08T12:10:13.660 回答