我有一个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的值,使用每个动作将其图像更改为突出显示的状态和正常状态。
有没有更简单的方法来实现这个目标?
答案 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类来实现此目的。