首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从选中状态变为正常状态时,UIButton的突出显示状态不会出现

从选中状态变为正常状态时,UIButton的突出显示状态不会出现
EN

Stack Overflow用户
提问于 2013-04-08 20:03:07
回答 2查看 1.5K关注 0票数 1

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

代码语言:javascript
复制
state-1 normal.
state-2 selected.
state-3 highlighted , going normal-to-selected.
state-4 highlighted , going selected-to-normal.

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

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

然而,在每个状态改变时,我需要改变突出显示的状态图像,以确保它在被按下时代表状态3和状态4中的任何一个。

问题是,当从selected变为normal时,UIButton看起来没有突出显示状态。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-08 20:21:39

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

一些最常见的

代码语言:javascript
复制
UIControlStateNormal,
UIControlStateHighlighted,
UIControlStateDisabled,
UIControlStateSelected,
UIControlStateSelected | UIControlStateHighlighted,
UIControlStateSelected | UIControlStateDisabled,

所以如果你想在selected的时候有一个highlighted状态,那么我更喜欢这样做。

代码语言:javascript
复制
    [button setImage:imageHighlighted forState:UIControlStateSelected | UIControlStateHighlighted];

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

代码语言:javascript
复制
    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];

诸若此类

票数 8
EN

Stack Overflow用户

发布于 2013-04-08 20:10:14

将突出显示的状态保存在Boolean变量中是跟踪状态的常用方法,但是这里有一些东西可以简化您的代码。

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

代码语言:javascript
复制
-(void)setHighligted:(BOOL) highlighted {
    self.mySavedHighlightedState = highlighted;
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15878555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档